Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità
NUC 15 Pro e NUC 15 Pro+ sono i due nuovi mini-PC di casa ASUS pensati per uffici e piccole medie imprese. Compatti, potenti e pieni di porte per la massima flessibilità, le due proposte rispondono in pieno alle esigenze attuali e future grazie a una CPU con grafica integrata, accompagnata da una NPU per la gestione di alcuni compiti AI in locale.
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Dal palco di Proofpoint Protect 2025 emerge la strategia per estendere la protezione dagli utenti agli agenti IA con il lancio di Satori Agents, nuove soluzioni di governance dei dati e partnership rafforzate che ridisegnano il panorama della cybersecurity
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-02-2008, 15:17   #1
noodles83
Senior Member
 
L'Avatar di noodles83
 
Iscritto dal: Oct 2005
Città: Pisa
Messaggi: 1047
[C] interfaccia per un gestore di memoria statica

Mi è stato assegnato questo piccolo progetto da fare in C, ma ho alcuni dubbi che vorrei mi aiutaste a chiarirmi.

IL PROBLEMA:
Come parte dello sviluppo di una nuova consolle per videogiochi, siete stati incaricati di sviluppare il codice che si occuperà della
memorizzazione dei dati dei giochi (missioni svolte, livelli superati, opzioni di gioco, caratteristiche dei personaggi, ecc.). A causa di
limitazione dell'hardware, è disponibile per la memorizzazione di questi dati solo un banco di memoria statica di 64Kb. Tale memoria
viene gestita a pagine di 512 byte: ogni gioco eseguito sulla console (identificato da un codice identificativo unico, assegnato dal
produttore) può chiedere al gestore memoria di memorizzare un numero di pagine comprese fra 1 e 64 (ovvero, fra 512 e 32768
bytes). Nel caso non ci sia memoria disponibile nell'ambito dei 64Kb, il gestore deve abbandonare le pagine più vecchie fra quelle
memorizzate (si perdono cioè i dati memorizzati dal gioco che non è stato usato da più tempo per far spazio a quelli del gioco
attualmente in uso) e utilizzarle per soddisfare la richiesta corrente.

Si noti che tutti i dati di servizio necessari a gestire la memoria statica devono essere a loro volta conservati all'interno di tale
memoria (altrimenti, sarebbero persi allo spegnimento e successivo avvio della console); a tale scopo deve essere dedicato il minor
numero possibile di pagine, per lasciare maggior spazio ai dati dei giochi.



Mi devo costruire una API e va bene... ho pensato di usare un array bidimensionale per la memoria.

typedef unsigned char BYTE;
static BYTE pages[128][512];

Quello che mi turba, da nubbio, è la parte in corsivo... penso di non aver capito bene il problema. Dovrei salvare nella struttara dati che ho fatto tutte le variabili globali e quelle strutture ausiliare che eventualmente uso? E' questo il senso della cosa?

Mi continua però a sfuggire sempre qualcosa... primo... come è possibile fare una cosa del genere, per esempio salvare una struct in un array di byte?
secondo. perchè quello che inserisco in quell'array di byte dovrebbe essere preservato da un riavvio della console?
__________________
Vendite concluse ottimamente con: Bastian UMTS, Tiscaliniano.
---------------------------------------------------------
1) Macbook Pro Core 2 Duo 2,16Ghz - 2GB di RAM - HD 160GB - Glossy Widescreen - 2°Gen
2) iPhone 3G - 8GB Black
3) Ipod Shuffle Blu 1GB
4) iMac 27" QuadCore i7
noodles83 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2008, 16:04   #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
Perché hai usato la parola "static" nella dichiarazione ?

Quello scritto in corsivo significa che devi usare una o più pagine per andare a memorizzare i dati della tabella LRU (Least Recently Used) e la tabella della pagine occupate. Esistono diverse politiche più o meno efficienti e più o meno avide di memoria per gestire un algoritmo di rimpiazzamento LRU, ma spero che te le abbiano insegnate.

Ti consiglio di usare direttamente un vettore monodimensionale per la memoria. Ti dovrebbe rendere molto più semplice l'accesso per la scrittura e la lettura delle tabelle di cui sopra.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2008, 16:14   #3
noodles83
Senior Member
 
L'Avatar di noodles83
 
Iscritto dal: Oct 2005
Città: Pisa
Messaggi: 1047
Quote:
Originariamente inviato da cionci Guarda i messaggi
Perché hai usato la parola "static" nella dichiarazione ?
perchè credo che non debba essere pubblica, no?

Come politica di rimpiazzamento avevo appunto in mente una cosa del genere, ma quello non è il mio problema.
Il mio problema indipendetemente dal tipo di politica utilizzata capire come poter memorizzare a loro volta queste tabelle o queste informazioni di rilocazione su l'array di byte.
__________________
Vendite concluse ottimamente con: Bastian UMTS, Tiscaliniano.
---------------------------------------------------------
1) Macbook Pro Core 2 Duo 2,16Ghz - 2GB di RAM - HD 160GB - Glossy Widescreen - 2°Gen
2) iPhone 3G - 8GB Black
3) Ipod Shuffle Blu 1GB
4) iMac 27" QuadCore i7

Ultima modifica di noodles83 : 02-02-2008 alle 16:30.
noodles83 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2008, 16:24   #4
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 noodles83 Guarda i messaggi
perchè credo che non debba essere pubblica, no?
Forse per un progetto del genere è ammissibile.
Quote:
Originariamente inviato da noodles83 Guarda i messaggi
Si non capisco però come poter memorizzare una tabella nell'array di byte...
Lavorando sugli indirizzi con i puntatori.
&memory[page * 512] ti ritorna l'indirizzo dell'inizio della pagina. Se io voglio lavorare a byte sulla pagina 1 posso tranquillamente fare:

char *lru = &memory[1]; /*indirizzo della pagina 1*/

Poi per accedere ai vari byte: lru[i] = 1;

Ovviamente sarai tu a doverti limitare sulla dimensione di lru e della tabella della memoria usata.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2008, 16:39   #5
noodles83
Senior Member
 
L'Avatar di noodles83
 
Iscritto dal: Oct 2005
Città: Pisa
Messaggi: 1047
scusa, avevo modificato il post precedente...
__________________
Vendite concluse ottimamente con: Bastian UMTS, Tiscaliniano.
---------------------------------------------------------
1) Macbook Pro Core 2 Duo 2,16Ghz - 2GB di RAM - HD 160GB - Glossy Widescreen - 2°Gen
2) iPhone 3G - 8GB Black
3) Ipod Shuffle Blu 1GB
4) iMac 27" QuadCore i7
noodles83 è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 10:29   #6
noodles83
Senior Member
 
L'Avatar di noodles83
 
Iscritto dal: Oct 2005
Città: Pisa
Messaggi: 1047
magari sarò duro io... è molto probabile, ma il mio problema è un'altro.

Io ho questo array di byte, facciamolo mono-dimensionale, che in effetti è meglio.

Ho una struct così fatta:
typedef struct data{
long game_id; /* ID univoco del gioco*/
short block_id; /* ID del blocco*/
int pageSize; /* lunghezza in byte del blocco*/
}DATA;

se voglio salvare questa stuttura nell'array di byte, come faccio? devo usare memcpy()?

E come mi verrebbe "mappata" sull'array? fatemi un esempio per capire... mettiamo cosa una volta salvata voglia accedere al block_ID di questa struct.
__________________
Vendite concluse ottimamente con: Bastian UMTS, Tiscaliniano.
---------------------------------------------------------
1) Macbook Pro Core 2 Duo 2,16Ghz - 2GB di RAM - HD 160GB - Glossy Widescreen - 2°Gen
2) iPhone 3G - 8GB Black
3) Ipod Shuffle Blu 1GB
4) iMac 27" QuadCore i7
noodles83 è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 10:49   #7
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
BYTE memory[65536];

DATA *mytable;

//supponiamo di volerlo memorizzare nella seconda pagina
mytable = (DATA *)&memory[2*512];
//calcolo la quantità di strutture data che possono essere contenute nel blocco (anche se non serve, giusto per farti capire)
int mytable_size = 512 / sizeof(DATA);

mytable lo tratti esattamente come un normale vettore di DATA ed hai a disposizione mytable_size elementi per non sforare i limiti della pagina (cosa che probabilmente dovrai tenere di conto).
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 11:44   #8
noodles83
Senior Member
 
L'Avatar di noodles83
 
Iscritto dal: Oct 2005
Città: Pisa
Messaggi: 1047
Quote:
Originariamente inviato da cionci Guarda i messaggi
BYTE memory[65536];

DATA *mytable;

//supponiamo di volerlo memorizzare nella seconda pagina
mytable = (DATA *)&memory[2*512];
//calcolo la quantità di strutture data che possono essere contenute nel blocco (anche se non serve, giusto per farti capire)
int mytable_size = 512 / sizeof(DATA);

mytable lo tratti esattamente come un normale vettore di DATA ed hai a disposizione mytable_size elementi per non sforare i limiti della pagina (cosa che probabilmente dovrai tenere di conto).

per prima cosa ti ringrazione per la pazienza e l'aiuto che mi stai dando.

mmm... vediamo se ho capito. In questo modo posso continuare ad accedere a memory byte a byte, ma nello stesso tempo usare mytable come se l'array fosse fatto di strutture DATA, operando però sulla stesso spazio di memoria. Giusto?
__________________
Vendite concluse ottimamente con: Bastian UMTS, Tiscaliniano.
---------------------------------------------------------
1) Macbook Pro Core 2 Duo 2,16Ghz - 2GB di RAM - HD 160GB - Glossy Widescreen - 2°Gen
2) iPhone 3G - 8GB Black
3) Ipod Shuffle Blu 1GB
4) iMac 27" QuadCore i7
noodles83 è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 11:56   #9
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
Sì...ed è la stessa cosa che si fa con malloc...infatti malloc ritorna un puntatore a void che viene poi castato al tipo di dato che ci interessa.
In pratica anche le tue API dovranno ritornare al gioco un puntatore a void

PS: 2*512 è la terza pagina
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2008, 12:01   #10
noodles83
Senior Member
 
L'Avatar di noodles83
 
Iscritto dal: Oct 2005
Città: Pisa
Messaggi: 1047
Quote:
Originariamente inviato da cionci Guarda i messaggi
Sì...ed è la stessa cosa che si fa con malloc...infatti malloc ritorna un puntatore a void che viene poi castato al tipo di dato che ci interessa.
In pratica anche le tue API dovranno ritornare al gioco un puntatore a void

PS: 2*512 è la terza pagina
perfetto. Inizio a vedere uno spiraglio di luce... Grazie.

Vedo nel pomeriggio di iniziare a buttare giù qualcosa di concreto.
__________________
Vendite concluse ottimamente con: Bastian UMTS, Tiscaliniano.
---------------------------------------------------------
1) Macbook Pro Core 2 Duo 2,16Ghz - 2GB di RAM - HD 160GB - Glossy Widescreen - 2°Gen
2) iPhone 3G - 8GB Black
3) Ipod Shuffle Blu 1GB
4) iMac 27" QuadCore i7
noodles83 è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 16:12   #11
noodles83
Senior Member
 
L'Avatar di noodles83
 
Iscritto dal: Oct 2005
Città: Pisa
Messaggi: 1047
mi è venuto un dubbio...

se ho:
DATA* mytable=(DATA*)&memory[125];

se faccio:
mytable=mytable+1;

mytable punta all'area di memoria memory[126], cioè al byte successivo?

oppure mytable si sposta di una grandezza pari sizeof(DATA) ?
__________________
Vendite concluse ottimamente con: Bastian UMTS, Tiscaliniano.
---------------------------------------------------------
1) Macbook Pro Core 2 Duo 2,16Ghz - 2GB di RAM - HD 160GB - Glossy Widescreen - 2°Gen
2) iPhone 3G - 8GB Black
3) Ipod Shuffle Blu 1GB
4) iMac 27" QuadCore i7

Ultima modifica di noodles83 : 05-02-2008 alle 16:22.
noodles83 è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 17:28   #12
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
Si sposta di una grandezza pari a siezof(DATA).
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2008, 16:23   #13
marra11mg
Member
 
Iscritto dal: Feb 2008
Messaggi: 32
ma le pagine che riservi per ogni gioco, possono essere in ordine sparso oppure basta che sono contigue?
In quest'ultimo caso sarebbe molto più semplice, potendo riservare 2kb alla tabella e usando gli altri 62k per salvare i giochi
marra11mg è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 15:44   #14
noodles83
Senior Member
 
L'Avatar di noodles83
 
Iscritto dal: Oct 2005
Città: Pisa
Messaggi: 1047
@marra11mg: possono essere anche i ordine sparso.

Vi chiedo ancora aiuto... ho un problema piccolo e uno grosso.

PROBLEMA PICCOLO:
vorrei sapere che warning è questo che mi viene sempre prodotto e non riesco ad eliminare?

In file included from memManager.c:8:
memManager.h:23: warning: no semicolon at end of struct or union

ne sapete qualcosa?


PROBLEMA GROSSO:
sto implementando questa funzione int psave(long game_id, short block_id, byte *buffer, int size);
vi riporto un pezzo di codice...

typedef unsigned char byte; /*posto in memManager.h*/
byte memory[65536]; /*è fuori dalla funzione, posta come variabile globale*/

/*nella funzione che sto implementando scrivo*/
mytable=(DATA*)&memory[0];
mytable->gioco=game_id;
mytable->blocco=block_id;
mytable->blocco_size=size+sizeof(DATA);
mytable->pages= n;
mytable->flag=1;
mytable->time=time(NULL);
memcpy(&memory[sizeof(DATA)],buffer,size); /*copio i dati in memoria*/

se provo a fare printf("%s", memory[sizeof(DATA)]) mi da segmentation fault.... come mai???
__________________
Vendite concluse ottimamente con: Bastian UMTS, Tiscaliniano.
---------------------------------------------------------
1) Macbook Pro Core 2 Duo 2,16Ghz - 2GB di RAM - HD 160GB - Glossy Widescreen - 2°Gen
2) iPhone 3G - 8GB Black
3) Ipod Shuffle Blu 1GB
4) iMac 27" QuadCore i7

Ultima modifica di noodles83 : 07-02-2008 alle 15:59.
noodles83 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 15:59   #15
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
C'è scritto cosa significa.
Devi mettere un punto e virgolo dopo la parentesi chiusa della dichiarazione di una struct.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 16:00   #16
noodles83
Senior Member
 
L'Avatar di noodles83
 
Iscritto dal: Oct 2005
Città: Pisa
Messaggi: 1047
Quote:
Originariamente inviato da cionci Guarda i messaggi
C'è scritto cosa significa.
Devi mettere un punto e virgolo dopo la parentesi chiusa della dichiarazione di una struct.
c è il punto e virgola...

typedef struct data{

long gioco; /* ID univoco del gioco*/
short blocco; /* ID del blocco*/
int blocco_size;/* lunghezza in byte dei dati del blocco*/
int pages; /* numero di pagine occupate dal blocco*/
int flag; /* flag che indica con 0 se il blocco è libero, 1 altrimenti.*/
time_t time /* data dell'ultimo riferimento al blocco*/
} DATA;
__________________
Vendite concluse ottimamente con: Bastian UMTS, Tiscaliniano.
---------------------------------------------------------
1) Macbook Pro Core 2 Duo 2,16Ghz - 2GB di RAM - HD 160GB - Glossy Widescreen - 2°Gen
2) iPhone 3G - 8GB Black
3) Ipod Shuffle Blu 1GB
4) iMac 27" QuadCore i7
noodles83 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 16:04   #17
noodles83
Senior Member
 
L'Avatar di noodles83
 
Iscritto dal: Oct 2005
Città: Pisa
Messaggi: 1047
che imbecille!! mancava il punto e virgola alla variabile time....

e per il problema grosso invece? c è una spiegazione?
__________________
Vendite concluse ottimamente con: Bastian UMTS, Tiscaliniano.
---------------------------------------------------------
1) Macbook Pro Core 2 Duo 2,16Ghz - 2GB di RAM - HD 160GB - Glossy Widescreen - 2°Gen
2) iPhone 3G - 8GB Black
3) Ipod Shuffle Blu 1GB
4) iMac 27" QuadCore i7
noodles83 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 16:15   #18
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 noodles83 Guarda i messaggi
@marra11mg: possono essere anche i ordine sparso.

Vi chiedo ancora aiuto... ho un problema piccolo e uno grosso.

PROBLEMA PICCOLO:
vorrei sapere che warning è questo che mi viene sempre prodotto e non riesco ad eliminare?

In file included from memManager.c:8:
memManager.h:23: warning: no semicolon at end of struct or union

ne sapete qualcosa?


PROBLEMA GROSSO:
sto implementando questa funzione int psave(long game_id, short block_id, byte *buffer, int size);
vi riporto un pezzo di codice...

typedef unsigned char byte; /*posto in memManager.h*/
byte memory[65536]; /*è fuori dalla funzione, posta come variabile globale*/

/*nella funzione che sto implementando scrivo*/
mytable=(DATA*)&memory[0];
mytable->gioco=game_id;
mytable->blocco=block_id;
mytable->blocco_size=size+sizeof(DATA);
mytable->pages= n;
mytable->flag=1;
mytable->time=time(NULL);
memcpy(&memory[sizeof(DATA)],buffer,size); /*copio i dati in memoria*/

se provo a fare printf("%s", memory[sizeof(DATA)]) mi da segmentation fault.... come mai???
memcpy(&memory[sizeof(DATA)],buffer,size); /*copio i dati in memoria*/

Che cosa vuoi fare con questa istruzione ? Perché indicizzi memory con sizeof(DATA) ?

printf("%s", memory[sizeof(DATA)]);

Che senso ha ? C'è una stringa a quell'indirizzo ? Se vuoi stampare una stringa devi usare &memory[sizeof(DATA)], se non c'è una stringa a quell'indirizzo allora proprio non ha senso quella stampa.
In memory[sizeof(DATA)] c'è il primo byte di buffer.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 16:27   #19
noodles83
Senior Member
 
L'Avatar di noodles83
 
Iscritto dal: Oct 2005
Città: Pisa
Messaggi: 1047
Quote:
Originariamente inviato da cionci Guarda i messaggi
memcpy(&memory[sizeof(DATA)],buffer,size); /*copio i dati in memoria*/

Che cosa vuoi fare con questa istruzione ? Perché indicizzi memory con sizeof(DATA) ?
in byte *buffer ho una stringa che voglio copiare in memoria a partire da memory[sizeof(DATA)]

Quote:
Originariamente inviato da cionci Guarda i messaggi
printf("%s", memory[sizeof(DATA)]);

Che senso ha ? C'è una stringa a quell'indirizzo ? Se vuoi stampare una stringa devi usare &memory[sizeof(DATA)], se non c'è una stringa a quell'indirizzo allora proprio non ha senso quella stampa.
In memory[sizeof(DATA)] c'è il primo byte di buffer.
si voglio stamapare la stringa. però devo dire che in buffer ho inserito con un cliclo un carattere alla volta.
__________________
Vendite concluse ottimamente con: Bastian UMTS, Tiscaliniano.
---------------------------------------------------------
1) Macbook Pro Core 2 Duo 2,16Ghz - 2GB di RAM - HD 160GB - Glossy Widescreen - 2°Gen
2) iPhone 3G - 8GB Black
3) Ipod Shuffle Blu 1GB
4) iMac 27" QuadCore i7
noodles83 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 17:09   #20
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 noodles83 Guarda i messaggi
si voglio stamapare la stringa.
Allora devi usare la & davanti a memory. Spero che tu abbia copiato anche il carattere di finestringa.
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondono completezza e duttilità ASUS NUC 15 Pro e NUC 15 Pro+, mini PC che fondo...
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint Cybersecurity: email, utenti e agenti IA, la nuo...
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
30 anni di PlayStation da indossare: arr...
Amazon lancia gli Echo più potent...
Amazon rinnova la gamma Fire TV: ecco le...
Ring lancia le sue prime videocamere con...
Blink amplia la gamma di videocamere di ...
Jaguar Land Rover riprende (gradualmente...
HONOR inaugura il primo ALPHA Flagship S...
Yamaha: ecco il brevetto del 'finto moto...
'Console obsoleta e utenti ingannati': u...
Stop al ransomware su Google Drive, graz...
L'IA è la nuova interfaccia utent...
Battlefield 6: confermata la dimensione ...
Windows 11 porta il Wi-Fi 7 alle aziende...
Logitech MX Master 4 subito disponibile ...
'Nonna Skyrim' dice addio all'RPG di Bet...
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: 17:03.


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