Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Abbiamo provato per molti giorni il nuovo Z Fold7 di Samsung, un prodotto davvero interessante e costruito nei minimi dettagli. Rispetto al predecessore, cambiano parecchie cose, facendo un salto generazionale importante. Sarà lui il pieghevole di riferimento? Ecco la nostra recensione completa.
The Edge of Fate è Destiny 2.5. E questo è un problema
The Edge of Fate è Destiny 2.5. E questo è un problema
Bungie riesce a costruire una delle campagne più coinvolgenti della serie e introduce cambiamenti profondi al sistema di gioco, tra nuove stat e tier dell’equipaggiamento. Ma con risorse limitate e scelte discutibili, il vero salto evolutivo resta solo un’occasione mancata
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-01-2008, 17:54   #261
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 5845
Quote:
Originariamente inviato da cionci Guarda i messaggi
Perché la comunicazione fra i thread avviene attraverso la memoria Infatti thread appartenenti allo stesso processo vedono la stessa memoria...
Ovviamente se i processori distinti sui quali girano non hanno memoria condivisa allora non possono comunicare
Ok, allora guarda gua

http://charm.cs.uiuc.edu/manuals/htm...++/manual.html

Questa è Charm++ un'altra libreria spesso usata con i supercomputers che fa un pesante uso di threads. Leggendo il manuale, almeno per adesso, non ho visto relazioni con il message passing. Allora come fanno i threads a comunicare tra loro ?
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 17:55   #262
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12103
Quote:
Originariamente inviato da Unrue Guarda i messaggi
Pensandoci meglio non sono mica più così sicuro che la memoria nel nodo sia condivisa. Probabilmente dipende dal supercompuer in questione. Ora però mi fai venire una curiosità: perchè i threads non possono operare con architetture a memoria distribuita?
Ogni thread va elaborato da un processore fisico/logico...
Se fai girare thread diversi in macchine che non condividono la stessa memoria (come ad esempio ogni macchina componente il cluster) allora devi ovviamente usare dei meccanismi di comunicazioni per scambiare i dati elaborati, siano essi meccanismi di messagge passing o ad esempio work units similari a quelle del folding@home (che, sinceramente, non ho idea su cosa siano basate).
Su una macchina a memoria condivisa invece non hai alcuna necessità di scambiare i dati dato che i thread hanno completamente a disposizione tutta la memoria della macchina, al massimo potranno avere prestazioni un pò inferiori nel caso in cui i dati da elaborare si trovino nei moduli di memoria direttamente connessi agli altri processori, e quindi le latenze sarebbero + elevate (ovviamente tralasciando il distinguo tra bus point-to-point, come l'HT o bus condiviso, quale il classico FSB, e la presenza di dati modificati nella cache di un processore che ancora devono essere scritti nella memoria RAM).
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 18:03   #263
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 5845
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
Su una macchina a memoria condivisa invece non hai alcuna necessità di scambiare i dati dato che i thread hanno completamente a disposizione tutta la memoria della macchina, al massimo potranno avere prestazioni un pò inferiori nel caso in cui i dati da elaborare si trovino nei moduli di memoria direttamente connessi agli altri processori, e quindi le latenze sarebbero + elevate (ovviamente tralasciando il distinguo tra bus point-to-point, come l'HT o bus condiviso, quale il classico FSB, e la presenza di dati modificati nella cache di un processore che ancora devono essere scritti nella memoria RAM).
Okk, mi torna
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 18:18   #264
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da cionci Guarda i messaggi
Non credo assolutamente
Praticamente nel 90% dei casi i passaggi si fanno per riferimento o per puntatore...se lo fai per copia sei un masichista

void messageGot (Telegram &telegram);

Prima sei andato a sfruttare una caso (tante classi piccole) in cui il C++ era svantaggiato perché deallocavi subito, tra l'altro a mano...
Con una politica di deallocazione più furba il C++ sarebbe tornato nuovamente in testa,,,
Qui ti voglio!
Specificata cosi', ogni programmatore Java sa gia quel che fare, e sa che telegram e' valido per ogni tipo di elaborazione che gli salta in mente.

Ma... e' lo stesso per il programmatore C++? Assolutamente no!
Telegram potrebbe essere una variabile locale, nel metodo di chiamata del dispatcher, giusto?

Come fai a saperlo? Se non te lo dice qualcuno, NON LO PUOI SAPERE.

A questo punto, aggiungo un tassello: ho ricevuto questo telegramma e lo devo, ovviamente, elaborare.
L'elaborazione e' affidata ad un altro thread, per motivi di efficienza. Devo quindi fare una push dell'oggetto in una coda, il thread lo prelevera' e lo elaborera'.
Sei costretto, in C++, a fare una copia!
Altrimenti, potrebbe essere che sei efficiente ma, sorry, vai in crash

Java ovviamente non fara' alcuna copia, tirera' dritto e saremo tutti sicuri che funziona correttamente. In C++ non potrai essere sicuro, ed avrai anche paura di generare dei leak!
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 18:41   #265
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
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Qui ti voglio!
Specificata cosi', ogni programmatore Java sa gia quel che fare, e sa che telegram e' valido per ogni tipo di elaborazione che gli salta in mente.

Ma... e' lo stesso per il programmatore C++? Assolutamente no!
Telegram potrebbe essere una variabile locale, nel metodo di chiamata del dispatcher, giusto?

Come fai a saperlo? Se non te lo dice qualcuno, NON LO PUOI SAPERE.
Non ho capito Fammi un'esempio...
Quote:
Originariamente inviato da sottovento Guarda i messaggi
A questo punto, aggiungo un tassello: ho ricevuto questo telegramma e lo devo, ovviamente, elaborare.
L'elaborazione e' affidata ad un altro thread, per motivi di efficienza. Devo quindi fare una push dell'oggetto in una coda, il thread lo prelevera' e lo elaborera'.
Sei costretto, in C++, a fare una copia!
Altrimenti, potrebbe essere che sei efficiente ma, sorry, vai in crash

Java ovviamente non fara' alcuna copia, tirera' dritto e saremo tutti sicuri che funziona correttamente. In C++ non potrai essere sicuro, ed avrai anche paura di generare dei leak!
Certo...ma questo dovrebbe giustificare prestazioni migliori da parte di Java ?
Comunque stai ricadendo nuovamente sul garbage collector...se io uso un garbage collector in C++ posso copiare quanti riferimenti voglio
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 19:46   #266
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da cionci Guarda i messaggi
Non ho capito Fammi un'esempio...
In generale, quando si implementano queste architetture in C++ (beh, sono delle callback) i metodi sono del tipo:
Codice:
void messageGot (Telegram *telegram);
oppure, come hai scritto:
Codice:
void messageGot (Telegram &telegram);
Domanda: qual e' la durata della vita di questo oggetto?
Questo oggetto e' stato allocato per me: lo devo deallocare?
Se non lo devo deallocare, chi lo dealloca?
L'oggetto e' ancora valido al termine della MIA esecuzione? In pratica, come ho scritto nell'esempio che seguiva, posso scrivere:
coda.push (telegram)
oppure e' meglio infilarci una copia?

Quote:
Originariamente inviato da cionci Guarda i messaggi
Certo...ma questo dovrebbe giustificare prestazioni migliori da parte di Java ?
Comunque stai ricadendo nuovamente sul garbage collector...se io uso un garbage collector in C++ posso copiare quanti riferimenti voglio
Certo, e' ovvio che vado ad insistere proprio li', perche' e' quello che puo' fare la differenza, e la puo' fare senza che io ne sappia niente.
Esistono del garbage collector per C++ ma sono limitati, poiche' in C++ esiste un'algebra dei puntatori. Cmq se ci metti un garbage collector, allora siamo nel gruppo dei linguaggi "managed"

[OT]Cionci: se pubblico un OT mi censuri? Certe volte ci sono notizie che vanno condivise [/OT]
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 21:22   #267
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
Quote:
Originariamente inviato da sottovento Guarda i messaggi
In generale, quando si implementano queste architetture in C++ (beh, sono delle callback) i metodi sono del tipo:
Codice:
void messageGot (Telegram *telegram);
oppure, come hai scritto:
Codice:
void messageGot (Telegram &telegram);
Domanda: qual e' la durata della vita di questo oggetto?
Questo oggetto e' stato allocato per me: lo devo deallocare?
Se non lo devo deallocare, chi lo dealloca?
L'oggetto e' ancora valido al termine della MIA esecuzione? In pratica, come ho scritto nell'esempio che seguiva, posso scrivere:
coda.push (telegram)
oppure e' meglio infilarci una copia?
In generale l'oggetto passato per riferimento non lo deve deallocare nessuno...sicuramente non dentro messageGot...
Con il puntatore dipende dall'architettura che scegli di implementare.
Quote:
Certo, e' ovvio che vado ad insistere proprio li', perche' e' quello che puo' fare la differenza, e la puo' fare senza che io ne sappia niente.
Esistono del garbage collector per C++ ma sono limitati, poiche' in C++ esiste un'algebra dei puntatori. Cmq se ci metti un garbage collector, allora siamo nel gruppo dei linguaggi "managed"
No, è sempre C++...se il Garbage Collector si può implementare in C++ perché diventerebbe Managed ?
Quote:
[OT]Cionci: se pubblico un OT mi censuri? Certe volte ci sono notizie che vanno condivise [/OT]
Non credo
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 21:36   #268
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da sottovento Guarda i messaggi
In generale, quando si implementano queste architetture in C++ (beh, sono delle callback) i metodi sono del tipo:
Codice:
void messageGot (Telegram *telegram);
oppure, come hai scritto:
Codice:
void messageGot (Telegram &telegram);
Domanda: qual e' la durata della vita di questo oggetto?
Sicuramente almeno fino all'uscita di messageGot.
Se vuoi usarlo fuori dal metodo devi farne una copia in una variabile locale.

Cosa che in realtà dovrebbe essere bene fare altrimenti qualcuno dall'esterno della classe potrebbe modificare il contenuto di una variabile magari privata.
Sai che bell'incapsulamento.

Quote:
Questo oggetto e' stato allocato per me: lo devo deallocare?
Se non lo devo deallocare, chi lo dealloca?
Essendo un riferimento non deve nemmeno passarti per la mente di deallocarlo

Quote:
L'oggetto e' ancora valido al termine della MIA esecuzione? In pratica, come ho scritto nell'esempio che seguiva, posso scrivere:
coda.push (telegram)
oppure e' meglio infilarci una copia?
generalmente è meglio mettere puntatori nei contenitori STL.
Con il codice:
Codice:
coda.push (telegram);
metti nel contenitore una copia dell'oggetto telegram.

Quote:
Certo, e' ovvio che vado ad insistere proprio li', perche' e' quello che puo' fare la differenza, e la puo' fare senza che io ne sappia niente.
Esistono del garbage collector per C++ ma sono limitati, poiche' in C++ esiste un'algebra dei puntatori.
"Che cavolo stai dicendo Willy?"
I puntatori hanno tutti la stessa dimensione 32 o 64 bit a seconda dell'architettura, l'unica eccezione è per i puntatori a metodo che a seconda del compilatore possono arrivare ad occupare anche a 20 byte.

Ultima modifica di tomminno : 03-01-2008 alle 21:39.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 21:38   #269
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da cionci Guarda i messaggi
In generale l'oggetto passato per riferimento non lo deve deallocare nessuno...sicuramente non dentro messageGot...
Un riferimento dovrebbe essere deallocato esclusivamente dal compilatore.
Penso che non ci sia cosa peggiore in C++ che passare il riferimento di qualcosa allocato dinamicamente.
Quello si che può portare ad errori a runtime difficilmente comprensibili.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 21:42   #270
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
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Un riferimento dovrebbe essere deallocato esclusivamente dal compilatore.
Penso che non ci sia cosa peggiore in C++ che passare il riferimento di qualcosa allocato dinamicamente.
Quello si che può portare ad errori a runtime difficilmente comprensibili.
Chiaro...ma volevo sottolineare che c'è la possibilità di farlo Infatti ho scritto che generalmente non lo deve deallocare nessuno...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 22:30   #271
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da cionci Guarda i messaggi
No, è sempre C++...se il Garbage Collector si può implementare in C++ perché diventerebbe Managed ?
E' una questione che mi incuriosisce da un po' e non ho mai avuto una risposta chiara: cosa si intende per linguaggio Managed ? Mi risulta che il termine sia stato coniato da Microsoft per indicare quei linguaggi che girano all'interno della framework .NET, ma vedo che e' spesso usato in contesti piu' generali. Ma allora che caratteristiche deve avere ? Avere un GC ? (Ma allora anche il C++ potrebbe esserlo), girare in una VM (quindi sarebbe da escludere Java compilato con gcj) ? Altro ?
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 22:36   #272
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Un riferimento dovrebbe essere deallocato esclusivamente dal compilatore.
Penso che non ci sia cosa peggiore in C++ che passare il riferimento di qualcosa allocato dinamicamente.
Quello si che può portare ad errori a runtime difficilmente comprensibili.
Perche' ? I riferimenti rendono piu' chiara l'ownership dell'oggetto che deve essere allocato e (in generale) deallocato dal chiamante.
Ovvio che se vado a prendermi i puntatori di tali oggetti spesso vuol dire che sono in cerca di rogne...
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 22:56   #273
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da cionci Guarda i messaggi
In generale l'oggetto passato per riferimento non lo deve deallocare nessuno...sicuramente non dentro messageGot...
Con il puntatore dipende dall'architettura che scegli di implementare.
Si, il puntatore probabilmente viene deallocato alla fine delle chiamate alle callback. Non hai grandi scelte, in una architettura simile (la piu' diffusa).
Ergo: dovrai copiare i tuoi dati per evitare che ti spariscano da sotto il naso. No other chances!

Quote:
Originariamente inviato da cionci Guarda i messaggi
No, è sempre C++...se il Garbage Collector si può implementare in C++ perché diventerebbe Managed ?
Perche' ero convinto che Managed si riferisse al fatto che qualcuno fa il management della memoria per me. Se non e' cosi', allora non ho proprio la minima idea di cosa sia Managed

Quote:
Originariamente inviato da cionci Guarda i messaggi
Non credo
Ti riferisci al fatto che non mi censuri o che certe notizie non vadano condivise?
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 23:01   #274
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Sicuramente almeno fino all'uscita di messageGot.
Se vuoi usarlo fuori dal metodo devi farne una copia in una variabile locale.
Esatto. E' proprio sulla copia che sto insistendo

Quote:
Originariamente inviato da tomminno Guarda i messaggi
Cosa che in realtà dovrebbe essere bene fare altrimenti qualcuno dall'esterno della classe potrebbe modificare il contenuto di una variabile magari privata.
Sai che bell'incapsulamento.



Essendo un riferimento non deve nemmeno passarti per la mente di deallocarlo
Perfetto! Ma... se e' un puntatore? Ne fai la copia comunque, no?

Quote:
Originariamente inviato da tomminno Guarda i messaggi
generalmente è meglio mettere puntatori nei contenitori STL.
Con il codice:
Codice:
coda.push (telegram);
metti nel contenitore una copia dell'oggetto telegram.
Beh, diciamo che ci siamo capiti

Quote:
Originariamente inviato da tomminno Guarda i messaggi
"Che cavolo stai dicendo Willy?"
I puntatori hanno tutti la stessa dimensione 32 o 64 bit a seconda dell'architettura, l'unica eccezione è per i puntatori a metodo che a seconda del compilatore possono arrivare ad occupare anche a 20 byte.
Il cavolo che sto dicendo e' che i puntatori, in C++ hanno operazioni non solo di assegnamento ma anche di somma, sottrazione, ...
Queste operazioni non ti permetteranno ti tener conto di tutti i puntatori che fanno riferimento allo stesso oggetto, in modo da deallocarlo automaticamente quando nessuno lo punta piu'. (i famosi "smart pointer" che usi quando programmi usando COM).
E' un problema ben noto...
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 23:03   #275
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Sì, ma devono essere gli STESSI programmi: stesse identiche funzionalità.

E' chiaro che poi, in base al linguaggio, posso utilizzare costrutti e librerie a disposizione. Ne parlo meglio qui: http://www.hwupgrade.it/forum/showpo...&postcount=152
Ok, quando leggo "stesso programma" io capisco anche medesima implementazione , questione di capirsi.
In questo caso allora non ha molto senso star li' a destreggiarsi in loop ciclopici... decidiamo un task un po' piu' complesso e vediamo come va a finire C++ vs. Java vs. resto del mondo.
Sempre che abbia senso. Il web e' pieno di confronti simili.
Che nella maggior parte dei casi hanno poco senso visto che spesso dettano anche come debbano essere scritti i programmi (vedi ad esempio il famoso shootout) e allora tanto vale.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 23:03   #276
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da marco.r Guarda i messaggi
E' una questione che mi incuriosisce da un po' e non ho mai avuto una risposta chiara: cosa si intende per linguaggio Managed ? Mi risulta che il termine sia stato coniato da Microsoft per indicare quei linguaggi che girano all'interno della framework .NET, ma vedo che e' spesso usato in contesti piu' generali. Ma allora che caratteristiche deve avere ? Avere un GC ? (Ma allora anche il C++ potrebbe esserlo), girare in una VM (quindi sarebbe da escludere Java compilato con gcj) ? Altro ?
Mi associo. Credevo anch'io che si riferisse solo al fatto che qualcuno si prende cura della mia memoria, ma ora non sono piu' sicuro di nulla.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 23:09   #277
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da marco.r Guarda i messaggi
Ok, quando leggo "stesso programma" io capisco anche medesima implementazione , questione di capirsi.
In questo caso allora non ha molto senso star li' a destreggiarsi in loop ciclopici... decidiamo un task un po' piu' complesso e vediamo come va a finire C++ vs. Java vs. resto del mondo.
Sempre che abbia senso. Il web e' pieno di confronti simili.
Che nella maggior parte dei casi hanno poco senso visto che spesso dettano anche come debbano essere scritti i programmi (vedi ad esempio il famoso shootout) e allora tanto vale.
Fantastico! Ovviamente hai [hanno] ragione.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 23:15   #278
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Perfetto! Ma... se e' un puntatore? Ne fai la copia comunque, no?
Dipende che policy hai stabilito per la gestione della memoria.
Se ci si gestisce la memoria da se' bisogna farlo con criterio, per cui quando chiami quel metodo dovresti gia' sapere se la proprieta' di quella memoria e' del chiamato, del chiamante e in tal caso se per una quantita' di tempo sufficiente a garantirne l'uso da parte del chiamato. Ovvio che se ogni metodo fa caso a parte si diventa matti...
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 23:28   #279
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da marco.r Guarda i messaggi
Dipende che policy hai stabilito per la gestione della memoria.
Se ci si gestisce la memoria da se' bisogna farlo con criterio, per cui quando chiami quel metodo dovresti gia' sapere se la proprieta' di quella memoria e' del chiamato, del chiamante e in tal caso se per una quantita' di tempo sufficiente a garantirne l'uso da parte del chiamato. Ovvio che se ogni metodo fa caso a parte si diventa matti...
Forse non ci siamo capiti. Quello che volevo dire e' che:
1 - c'e' un "dispatcher" che riceve dei telegrammi da dove vuole lui;
2 - se qualcuno ne vuole copia, implementa una interfaccia (o una funzione virtuale in C++) e si registra. Quando un nuovo telegramma arriva, viene automaticamente chiamata la messageGot() (e' sempre un esempio);
3 - la messageGot() deve elaborare il telegramma. Supponendo che debba fare diverse operazioni, si sia deciso di affidare le medesime ad un altro thread.

Quindi la messageGot() sara' piu' o meno cosi':
Codice:
void messageGot (Telegram *telegram)  oppure
void messageGot (Telegram &telegram)
{
  // Metti in coda per elaborare
  taskQueue.push (telegram);
}
E' una soluzione ampiamente usata.

Quello che dicevo e' che C++ non puo' fare alcuna assunzione sulla validita' della variabile FUORI dalla messageGot (), pertanto in coda non avra' altra scelta che mettere un COPIA dell'oggetto, o un puntatore alla COPIA dell'oggetto, altrimenti il rischio e' quello di processare della fuffa.

Java non ha questo problema.

Questo e' sufficiente a far pendere l'ago delle prestazioni dalla parte di Java? Well, dipende da quanto e' pesante le copie che C++ e' obbligato a fare mentre Java puo' evitare.

Scusami se non ho capito bene quello che intendevi dire.
Cmq quello che voglio andare a sfatare e' l'assunto:
- compilato = efficiente
- interpretato = inefficiente

Non ne sono per niente convinto, come non sono convinto dell'equazione
- C++ = efficiente
- Java = inefficiente

Sono convinto che ci sono dei casi (e non proprio particolari) in cui queste equazioni si invertono. E sono convinto che in futuro le cose cambieranno ancora...
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 23:41   #280
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Esatto. E' proprio sulla copia che sto insistendo
La copia locale è sempre buona cosa, se devi riusare la variabile in altre parti della classe. Perchè significa che nessuno dall'esterno possa modificarne il contenuto a tua insaputa. Se condividi il riferimento con altre classi questo presupposto cade.

Quote:
Perfetto! Ma... se e' un puntatore? Ne fai la copia comunque, no?
Per questo motivo è meglio passare il riferimento.
Se qualcuno ti passa un puntatore e te lo copi solo come puntatore e chi te lo ha passato decide di deallocarlo sei nei guai.
Stesso discorso per il chiamante che potrebbe vedersi deallocato il puntatore dal chiamato a sua insaputa.
Generalmente nelle classi si include il costruttore di copia che prende in ingresso un riferimento const, io almeno non ho mai scritto la versione di copia per puntatori, magari sono poco previdente

Quote:
Il cavolo che sto dicendo e' che i puntatori, in C++ hanno operazioni non solo di assegnamento ma anche di somma, sottrazione, ...
Queste operazioni non ti permetteranno ti tener conto di tutti i puntatori che fanno riferimento allo stesso oggetto, in modo da deallocarlo automaticamente quando nessuno lo punta piu'. (i famosi "smart pointer" che usi quando programmi usando COM).
E' un problema ben noto...
Sarà anche un problema ben noto, ma auto_ptr funziona da più di 10 anni e ci sono gli smart pointer di boost (e del nuovo standard) che non hanno di questi problemi.
Mai usato COM potrebbe essere un problema suo
tomminno è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold7: un grande salto generazionale Recensione Samsung Galaxy Z Fold7: un grande sal...
The Edge of Fate è Destiny 2.5. E questo è un problema The Edge of Fate è Destiny 2.5. E questo ...
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Il rover NASA Perseverance ha ''raccolto...
NASA e ISRO hanno lanciato il satellite ...
Switch 2 ha venduto 5,82 milioni di cons...
Assassin's Creed Black Flag Remake: le m...
Cosa ci fa una Xiaomi SU7 Ultra alle por...
Promo AliExpress Choice Day: prezzi stra...
Nostalgico, ma moderno: il nuovo THEC64 ...
AVM avvia la distribuzione di FRITZ! OS ...
Super offerte Bose: le QuietComfort a me...
Epic vince (ancora) contro Google: Andro...
Sconti nuovi di zecca su Amazon: 27 arti...
Un'esplorazione del 'lato oscuro' di Fac...
Apple ha venduto 3 miliardi di iPhone da...
Grandi sconti oggi sugli spazzolini elet...
Reddit sfida Google: vuole diventare il ...
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: 04:25.


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