码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2019-03-03 20:58:29      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:修改   管理   使用   需要   char   ati   white   sign   linu   


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

-----------------------------------------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();

 

 

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

 

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

标签:修改   管理   使用   需要   char   ati   white   sign   linu   

原文地址:https://www.cnblogs.com/BANLOONG/p/10466987.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!