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 (){
}
- 堆空间:运行时,可以自由分配,自我管理的分配和释放内存空间,生存周期有程序员决定。
创建:malloc()一旦成功返回,返回分配好的地址给我们,只需要接收。对于这个新地址的读法,由程序员灵活把握,输入参数指定分配的大小,单位为B。
char *p;
p = (char *)malloc(100) ;
if(p == NULL) {
error;
}
释放:free();
- 栈空间:运行时,函数内部使用的的变量,函数一旦返回,就释放,生存周期是函数内。
- 只读空间:静态空间,整个程序结束时释放内存,生存周期最长。
以上是关于Linux学习---内存分布基础的主要内容,如果未能解决你的问题,请参考以下文章
Linux进程虚拟内存空间布局/ Linux 下虚拟内存的分布
Linux 内核 内存管理Linux 内核内存布局 ② ( x86_64 架构体系内存分布 | 查看 /proc/meminfo 文件 | /proc/meminfo 重要字段解析 )
学习共享内存、分布式内存和/或 GPU 编程的典型问题和解决方案是啥?
Linux 内核 内存管理Linux 内核内存布局 ④ ( ARM64 架构体系内存分布 | 内核启动源码 start_kernel | 内存初始化 mm_init | mem_init )