Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Acer TravelMate P4 14: tanta sostanza per l'utente aziendale
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale
Forte di soluzioni tecniche specifiche, il notebook Acer TravelMate P4 14 abbina dimensioni compatte e buona robustezza per rispondere alle necessità specifiche degli utenti aziendali. La piattaforma AMD Ryzen 7 Pro assicura prestazioni elevate con i tipici ambiti di produttività personale e sul lavoro, mantenendo un'elevata autonomia.
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Dal salotto al giardino, il nuovo proiettore laser di Hisense promette esperienze cinematografiche in qualsiasi contesto: qualità d’immagine, semplicità d’uso, versatilità e prezzo competitivo il suo poker d'assi
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe
La flessibilità di configurazione è il punto di forza di questo 2-in-1, che ripropone in un form factor alternativo tutta la tipica qualità dei prodotti Lenovo della famiglia ThinkPad. Qualità costruttiva ai vertici, ottima dotazione hardware ma costo che si presenta molto elevato.
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


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...
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il c...
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart Intervista a Stop Killing Games: distruggere vid...
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione Samsung Galaxy S25 Edge: il top di gamma ultraso...
Spotify vola a quota 700 milioni di uten...
Microsoft pronta ad abbandonare il launc...
Windows 11, arriva una feature multimoni...
Addio termosifoni? Ecco la pittura itali...
OnePlus Pad Lite conquista l’Italia: il ...
Appuntamenti su Roblox: la controversa v...
L’AI Meteo di Google sbarca silenziosame...
Palo Alto Networks sarebbe in procinto d...
Motorola Moto G15 a soli 110€: 8/256GB d...
Hexagon strizza l'occhio ai sim racer e ...
Sennheiser HD 660S2 in offerta: le cuffi...
Broadcom impedirebbe di scaricare le pat...
Amazfit GTR 3 crolla a 69€: ma è solo l’...
Wyoming, un datacenter AI potrebbe consu...
Ancora più giù i prezzi de...
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: 13:32.


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