Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-01-2008, 18:54   #261
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6396
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, 18:55   #262
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
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, 19:03   #263
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6396
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, 19: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, 19: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, 20: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, 22: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, 22: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 22:39.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 03-01-2008, 22: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, 22: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, 23: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, 23: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, 23: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 04-01-2008, 00: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 04-01-2008, 00: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 04-01-2008, 00: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 04-01-2008, 00: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 04-01-2008, 00: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 04-01-2008, 00: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 04-01-2008, 00: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 vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Un gruppo di ladri ha usato Google Maps ...
Apple non si fida di Samsung per la real...
Windows 11: un nuovo driver nativo mette...
Vi hanno regalato buoni Amazon? Intanto ...
Via acari, polvere e sporco da materassi...
Cuffie Beats in super offerta su Amazon,...
Xbox Cloud Gaming arriva su Amazon Fire ...
Un blackout a San Francisco manda in til...
Windows 11 è diventato più...
Apple cambia strategia a causa della cri...
007 First Light: uscita rimandata di due...
Samsung Galaxy A37 e A57: il comparto fo...
DAZN lancia la sua offerta di Natale: My...
Gigabyte fa marcia indietro? Sparito il ...
Alcuni rivenditori giapponesi bloccano l...
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: 21:05.


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