虚拟内存的产生:
虚拟内存分布:
C语言角度上分布为区;
操作系统上分布为段;
练习1://question:变量 a,b,c,d,e,f,g,h,*h,i,p,*p分别在哪个区?
bss(Block Started by Symbol)段:是指用来存放程序中未初始化的全局变量的一块内存区域。
BSS段属于静态内存分配,.bss段是不占用.exe文件空间的,其内容由操作系统初始化(清零)。
数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。
数据段属于静态内存分配。.data需要占用.exe文件空间,
其内容由程序初始化。数据保存在目标文件中。
#include<stdio.h>
int a; //.bss段
static int b; //.bss段
int c=10; //.data段
static int d=20; //.data段
void function()
{
int e=30; //栈区
printf("hello world"); //代码区
}
int main()
{
static int f=40; //.data
g=50; //栈区
char *p="hello world"; //p在 栈区
//*p指向是 常量字符串 rodata(只读数据)
int *h=(int*)malloc(sizeof(int)*10);
//h:栈区 // *h 堆区
return 0;
}
图解:
练习2:question:变量 a,b,c,d,e,f,*d,*e,*f 分别在哪个区?
#include<stdio.h>
int a=100; //.data段
int b; //.bss段
int main()
{
int c=10; //栈区
char d[20]="hello world"; //d 栈 *d栈
char *e=malloc(20);//e 栈区 *d堆区
char *f="hello world"; //f 栈区 *f rodata区
return 0;
}
图解: