我得到一臺新電腦,所以一個朋友和我決定我們想用我們電腦的內存玩俄羅斯輪盤賭。總的前提是我們隨機在內存中佔據一個位置,並將其分配給一個隨機值,並查看哪個計算機發生故障/崩潰最快或最差。我所做的一切都不是想成爲一個好主意,所以不安全的做法被接受,甚至在此鼓勵。如何編輯隨機存儲器?
這是我到目前爲止有:
#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;
}
}
我不知道我怎麼可以設置這個值,甚至只是0。另外,我不知道什麼指針類型,我應該使用。 void指針似乎不起作用,但我可能不完全理解C++中不安全內存管理的複雜性。
有誰知道我該怎麼做?任何幫助,將不勝感激。
操作系統不會讓您的程序訪問未分配給您的程序的內存 – 2014-09-01 06:08:19
這不是現代操作系統或現代計算機體系結構在「正常」情況下的工作方式。閱讀[虛擬內存](https://en.wikipedia.org/wiki/Virtual_memory),瞭解爲什麼隨機嘗試翻轉某些隨機內存位置中的某些位不會導致其他程序出現故障。基本上,每個正在運行的程序都有自己的地址空間,所以一個程序的指針值不一定指向另一個程序的內存。由於操作系統對進程的內存使用情況保持非常接近的選項卡,因此最終所做的幾乎肯定會使自己的進程崩潰。 – 2014-09-01 06:10:02
答案取決於你的操作系統。 Linux上的root用戶可以通過'/ dev/mem'訪問隨機存儲位置,而Windows有一些特權的API調用,它們會給你類似的訪問權限。 – cdhowie 2014-09-01 06:10:28