linux内存分配


在《Linux程序设计(第四版)》第七章中,开头给出了一段代码,功能是分配大小为机器物理内存容量的2倍的内存,并且可以分配成功。原因是因为当物理内存耗尽之后,会开始使用所谓的交换空间。代码如下

   
  1 #include <unistd.h>
  
2 #include <stdlib.h>
3 #include <stdio.h>
4
5 #define A_MEGABYTE (1024 * 1024)
6 #define PHY_MEM_MEGS (1024 * 4)//我的机器内存是4GB
7
8 int main()
9 {
10 char *some_memory;
11 size_t size_to_allocate = A_MEGABYTE;
12 int meg_obtained = 0;
13
14 while(meg_obtained < PHY_MEM_MEGS * 2)
15 {
16 some_memory = (char*)malloc(size_to_allocate);
17 if(some_memory != NULL)
18 {
19 meg_obtained++;
20 sprintf(some_memory,"Hello world");
21 printf("%s - now allocated %d Megabytes\n",some_memory,meg_obtained);
22 }
23 else
24 exit(EXIT_FAILURE);
25 }
26
27 exit(EXIT_SUCCESS);
28 }

但是在我的机器上,运行到3000多M的时候就停止了,而我的机器的内存是4GB的。这是为什么呢?

Linux中可以分配的最大内存空间应该是多大呢?它和Windows下的内存管理有什么异同?

请输入图片描述

Linux c C++

搬运社社员 10 years, 7 months ago

Linux里的内存是虚拟内存,整个物理内存被分为内核空间和用户空间两部分,对于4G内存,一般是内核1G,用户空间3G。

进程是运行在虚拟内存上的,虚拟内存是通过页面来映射的,这样是得每个进程的空间都能够达到整个用户空间。因此,你的代码最多能分配3000多M的内存。

广告位招租 answered 10 years, 7 months ago

Your Answer