Torna indietro   Hardware Upgrade Forum > Software > Programmazione

AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
A Las Vegas AMD ha svelato i dettagli architetturali delle CPU EPYC di sesta generazione, note con il nome in codice Venice. Nuovi core Zen 6 e Zen 6c costruiti a 2 nanometri, fino a 256 core per socket, 16 canali di memoria, interfaccia PCI Express 6.0 e un'intera famiglia di proposte che va da Venice SP7 a Verano. Senza dimenticare la memoria, oggi la voce di costo più pesante in un server: AMD risponde con CXL 3.1 e con la tecnologia software MEXT, che porta la memoria flash dentro la gerarchia della DRAM.
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max mette un pannello IPS da 13 pollici con risoluzione 2,5K e refresh a 120 Hz davanti a una batteria da 10.100 mAh e a quattro altoparlanti. Il listino parte da 399,90 euro, per un progetto molto chiaro e ambizioso: schermo ampio, buon audio e giornate lontano dalla presa, a un prezzo che non pesa sul portafoglio
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Con la quattordicesima generazione Lenovo ridisegna il suo ThinkPad più iconico attorno al nuovo Space Frame e ai processori Intel Core Ultra Series 3. Resta sotto 1Kg, è molto più semplice da riparare e si rivolge al professionista che lavora in mobilità, con un prezzo da prodotto di vertice.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-12-2008, 14:28   #1
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7573
[C++] Puntatori a funzioni differenti

Ciao ragazzi,
è possibile usare un puntatore a funzione con funzioni che prendono un numero diverso di argomenti?

Ad esempio:

Codice:
funzione1(int)
funzione2(double,int)
Unrue è online   Rispondi citando il messaggio o parte di esso
Old 04-12-2008, 18:37   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Non che io sappia
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2008, 21:04   #3
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Perche' no? Si puo' sempre fare il cast di un puntatore da un tipo all'altro.
Il problema magari e' poi sapere se questo ha un senso...

Codice:
typedef int (*ptrToFunc1Param)(int);
typedef int (*ptrToFunc2Param)(double, int);

ptrToFunc1Param p1;
ptrToFunc2Param p2;

p1 = (ptrToFunc1Param)p2;
e poi? Beh, sapendo com'e' organizzato lo stack per default (i.e. push e pop dei parametri attuali dal chiamante, push dei parametri in ordine inverso) potresti provare qualche giochetto "sporco". Poi pero' non piangere se va tutto in crash o se la portabilita' e' un'altra cosa
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2008, 21:15   #4
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7573
Mm,meglio di no allora, troppo rischioso.

Ma se ad esempio definisco una funzione che prende un numero indefinito di parametri (ellissi) e poi un puntatore che punta ad essa?

E' fattibile?
Unrue è online   Rispondi citando il messaggio o parte di esso
Old 04-12-2008, 21:49   #5
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Beh, si. Ma mi sembra che il problema sia un altro e dipenda dal software che stai realizzando: in fase di chiamata della funzione, hai un semplice puntatore.
Hai un meccanismo per sapere quali e quanti parametri passare?

Immagino che per realizzare una soluzione del genere ti stia interfacciando a software gia' esistente (magari in C), ...

Scusa la banalita', ma nel caso tu stia invece progettando un software nuovo (in C++), prima di affrontare una simile soluzione prova a verificare se un semplice polimorfismo puo' fare al caso tuo. Anche se immagino ci avrai gia' pensato.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2008, 22:18   #6
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7573
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Beh, si. Ma mi sembra che il problema sia un altro e dipenda dal software che stai realizzando: in fase di chiamata della funzione, hai un semplice puntatore.
Hai un meccanismo per sapere quali e quanti parametri passare?

Immagino che per realizzare una soluzione del genere ti stia interfacciando a software gia' esistente (magari in C), ...

Scusa la banalita', ma nel caso tu stia invece progettando un software nuovo (in C++), prima di affrontare una simile soluzione prova a verificare se un semplice polimorfismo puo' fare al caso tuo. Anche se immagino ci avrai gia' pensato.
Si esatto, sto richiamando codice C già esistente. Il numero di parametri posso sapere quanti e quali sono, per ogni funzione. Quindi si può fare?
Unrue è online   Rispondi citando il messaggio o parte di esso
Old 05-12-2008, 08:31   #7
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Direi di si. Inoltre, visto che hai un meccanismo per sapere il numero di parametri (il loro tipo, anche?) allora puoi usare anche la soluzione precedente, qualcosa del genere:

Codice:
void *p; // il tuo generico puntatore a funzione
int res;
...
switch (NumberOfParameters)
{
   case 1:
   {
      ptrToFunc1Param p1 = (ptrToFunc1Param)p;
      res = p1 (firstParameter);
   }
   break;
   case 2:
   {
      ptrToFunc1Param p2 = (ptrToFunc2Param)p;
      res = p2 (firstParameter, secondParameters);
   }
   break;
}
e cosi' via. Immagino che saprai far sicuramente meglio di questo codice.
Cmq direi che entrambe le soluzioni (questa o funzione con lista variabile di parametri) sono attuabili in quanto hai confermato che SAI quali e quanti argomenti passare....
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2008, 11:53   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
sottovento: intendi accompagnare p con numero e tipo di parametri ? Allora direi tanto vale accompagnarla con una costante che identifica il tipo della funzione...

Qualcosa del tipo:

#define FUNCTION1 1
#define FUNCTION2 2

struct functionData
{
void *pointer;
int type;
};

Poi con uno switch su type si fa il cast come hai messo nel codice sopra.
Funziona, ma a me sembra un ragionamento alquanto contorto, cosa mi impedisce di chiamare direttamente la funzione senza il puntatore ? Ovviamente a meno che ci siano diverse funzioni con gli stessi parametri interscambiabili nel puntatore.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2008, 12:25   #9
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Si. Cercavo di fare un discorso che fosse il piu' generico possibile... cmq da quel che ho capito Unrue ha gia' la soluzione, quale che sia, per esso.

A proposito della tua domanda: non conosciamo il problema.
La risposta che poi hai dato ha perfettamente senso e, per quel poco che ho imparato lavorando sul codice altrui, corrisponde al 90% dei casi
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 08-12-2008, 10:54   #10
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7573
Ok, grazie a tutti delle risposte
Unrue è online   Rispondi citando il messaggio o parte di esso
 Rispondi


AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria AMD EPYC Venice: dentro Zen 6, i SoC a 256 core ...
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
OPPO Enco Clip 2: arriva la colorazione ...
POCO porta in Italia il nuovo mid-range ...
NARWAL Flow 2, doppio coupon Amazon: il ...
Kena anticipa il Black Friday: 350 GB e ...
GTA 6 su Xbox Cloud Gaming: niente strea...
NZXT presenta i nuovi H7 e H5, arrivano ...
Apple prepara un'app per trasformare i M...
C'è ancora vita per il Tesla Cybe...
Black Friday in anticipo e offerte a tem...
Mac mini M6 a 899€, Mac Studio M5 Max co...
Steam svela gli FPS dei giochi su Deck (...
Non solo Siri: l'intelligenza artificial...
La nuova mossa di Instagram: i filtri de...
RTX 5080 da 3.000 dollari e niente versi...
Amazon taglia i prezzi dei nuovi POCO: X...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:48.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v