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

Posted kingofloong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ",main); //00000000004017E2
p = (unsigned char *)main;
printf("%x ",p[0]); //e8
p[0] = 0x12;
printf("+++++%x ",p[0]); //Segmentation fault
return 0;

 

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

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

char *p;

p = (char *)malloc(100) ;

if(p == NULL) {

error;

}

 释放:free();

 

 

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

 

以上是关于Linux学习---内存分布基础的主要内容,如果未能解决你的问题,请参考以下文章

用了这么多年Rust终于搞明白了内存分布!

Linux进程虚拟内存空间布局/ Linux 下虚拟内存的分布

Linux 内核 内存管理Linux 内核内存布局 ② ( x86_64 架构体系内存分布 | 查看 /proc/meminfo 文件 | /proc/meminfo 重要字段解析 )

学习共享内存、分布式内存和/或 GPU 编程的典型问题和解决方案是啥?

linux内核物理内存空间分布

Linux 内核 内存管理Linux 内核内存布局 ④ ( ARM64 架构体系内存分布 | 内核启动源码 start_kernel | 内存初始化 mm_init | mem_init )