我得到一台新电脑,所以一个朋友和我决定我们想用我们电脑的内存玩俄罗斯轮盘赌。总的前提是我们随机在内存中占据一个位置,并将其分配给一个随机值,并查看哪个计算机发生故障/崩溃最快或最差。我所做的一切都不是想成为一个好主意,所以不安全的做法被接受,甚至在此鼓励。如何编辑随机存储器?
这是我到目前为止有:
#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