Ho un nuovo computer, quindi un amico e io abbiamo deciso che volevamo giocare alla roulette essenzialmente russa con la memoria dei nostri computer. La premessa generale è che prendiamo a caso una posizione nella memoria e assegniamo ad un valore casuale e vediamo il cui computer si blocca/si blocca più velocemente o il peggiore. Nessuno di quello che sto facendo è pensato per essere una buona idea, quindi sono accettate pratiche non sicure, anche incoraggiate qui.Come posso modificare la memoria casuale?
Questo è quello che ho finora:
#include <iostream>
#include <stdlib.h>
#include <time.h>
// use preprocessor to avoid losing this data during the running of the program
// 4GB RAM (4 * 2^32 bytes)
#define NUM_MEMORY_LOCATIONS 4294967296
int main()
{
// Intializes random number generator
time_t t;
srand((unsigned) time(&t));
while (true)
{
// 4GB RAM (2^32 bytes)
/** generate a 31-bit number between 0b0 (0) and 0b111 1111 1111 1111 1111 1111 1111 1111 (4294967295) **/
// generate a 15-bit number between 0b0 (0) and 0b111 1111 1111 1111 (32767)
unsigned long int hi = rand() % 32768;
// shift the bits
hi <<= 16;
// generate a 15-bit number between 0b0 (0) and 0b111 1111 1111 1111 (32767)
unsigned long int med = rand() % 32768;
// shift the bits
med <<= 1;
// generate a 1-bit number between 0b0 (0) and 0b1 (1)
unsigned long int lo = rand() % 2;
// combine to make final random number
unsigned long int randNum = hi + med + lo;
// select a random position in memory
void * randomPointer = 0;
randomPointer += randNum;
// Something like this here to break my computer:
//*randomPointer = 0;
}
}
non so come posso impostare questo valore, anche per solo 0. Inoltre, non sono sicuro di quale tipo di puntatore dovrei usare. Il puntatore del vuoto non sembra funzionare, ma potrei non comprendere appieno le complessità della gestione della memoria non sicura in C++.
Qualcuno sa come potrei fare questo? Qualsiasi aiuto sarebbe apprezzato.
Il sistema operativo non consente al programma di accedere alla memoria non allocata al programma –
Non è come i moderni sistemi operativi o le moderne architetture di computer funzionano in circostanze "normali". Leggi su [memoria virtuale] (https://en.wikipedia.org/wiki/Virtual_memory) per capire perché tentare in modo casuale di capovolgere alcuni bit in una posizione di memoria casuale non causerà alcun altro problema al glitch. Fondamentalmente, ogni programma in esecuzione ottiene il proprio spazio di indirizzamento in modo che i valori del puntatore di un programma non puntino necessariamente alla memoria di un altro programma. Tutto quello che si finisce per fare è quasi certamente il crash del proprio processo, dal momento che il sistema operativo mantiene tabulazioni molto vicine sull'utilizzo della memoria da parte dei processi. –
La risposta dipende dal tuo sistema operativo. L'utente root su Linux può accedere a posizioni di memoria casuali tramite '/ dev/mem' e Windows ha alcune chiamate API privilegiate che ti danno accesso simile. – cdhowie