这非常依赖于OS /计算机。
在大多数操作系统中,都不分配RAM。它们都分配VM空间。它们使一定范围的进程虚拟内存有效使用。通常,操作系统会在第一次写入时稍后分配RAM。在此之前,这些分配不会使用RAM(除了将它们列为有效VM空间的页表之外)。
如果要分配物理RAM,则必须使每个页面(sysconf(_SC_PAGESIZE)
使您的系统页面大小)变脏。
在Linux中,您可以在中查看包含所有详细信息的VM映射/proc/self/smaps
。RSS
是该映射的驻留集(RAM中驻留了多少),其他所有脏的东西都将被交换掉。所有非脏内存将可供使用,但在那之前将不存在。
size_t mem_length;
char (*my_memory)[sysconf(_SC_PAGESIZE)] = mmap(
NULL
, mem_length
, PROT_READ | PROT_WRITE
, MAP_PRIVATE | MAP_ANONYMOUS
, -1
, 0
);
int i;
for (i = 0; i * sizeof(*my_memory) < mem_length; i++) {
my_memory[i][0] = 1;
}
在某些实现中,也可以通过将MAP_POPULATE
标志传递给来实现mmap
,但是(取决于您的系统)如果尝试映射更多内容而没有可用的RAMmmap
,ENOMEM
则可能会失败。