Linux学习---内存分布基础


 内核空间 应用程序不允许访问

-----------------------------------------3G

 栈空间 局部变量 RW

-----------------------------------------

 运行时的堆空间  malloc

-----------------------------------------

 全局的数据空间(初始化的,未初始化)static RW data(数据段) 、bss(未初始化的数据段)

 只读数据段 (“Hello  world”) R text(代码段)

 代码段(code) R text //通过指针修改代码段会出现段错误❶(Segmentation fault)。

-----------------------------------------

 0x0:

 

 

注❶: //通过指针修改代码段报段错误,代码段只允许访问,但不可修改。

in只读main (){

unsigned char *p;
printf("%p\n",main); //00000000004017E2
p = (unsigned char *)main;
printf("%x\n",p[0]); //e8
p[0] = 0x12;
printf("+++++%x\n",p[0]); //Segmentation fault
return 0;

  • 堆空间:运行时,可以自由分配,自我管理的分配和释放内存空间,生存周期有程序员决定。

创建:malloc()一旦成功返回,返回分配好的地址给我们,只需要接收。对于这个新地址的读法,由程序员灵活把握,输入参数指定分配的大小,单位为B。

char *p;

p = (char *)malloc(100) ;

if(p == NULL) {

error;

}

 释放:free();

  • 栈空间:运行时,函数内部使用的的变量,函数一旦返回,就释放,生存周期是函数内。
  • 只读空间:静态空间,整个程序结束时释放内存,生存周期最长。

猜你喜欢

转载自www.cnblogs.com/BANLOONG/p/10466987.html