多久可以做网站,营销型网站推广,上海突发新闻,网站产品优化文章目录 C内存布局1.文字介绍2.图片介绍3.代码介绍 C内存布局
1.文字介绍
1.内核态空间
2.用户态空间 (1)栈区#xff1a;存储局部变量和函数调用的相关信息#xff0c;栈的特点是自动分配和释放#xff0c;由操作系统管理。栈由高地址向低地址生长#xff0c;通常为0x… 文章目录 C内存布局1.文字介绍2.图片介绍3.代码介绍 C内存布局
1.文字介绍
1.内核态空间
2.用户态空间 (1)栈区存储局部变量和函数调用的相关信息栈的特点是自动分配和释放由操作系统管理。栈由高地址向低地址生长通常为0x7ff (2)堆区堆区用于动态分配的内存(new、malloc)由程序员分配由低地址向高地址生长堆区与栈区没有明确的界限通常为0x5 (3)全局/静态区读写段(数据段)存放全局变量、静态变量。 分为①已初始化数据段.data ②未初始化数据段.bss (4)文字常量区只读段.rodata存放程序中直接使用的常量如 字符串常量、整数常量、浮点数常量 (5)程序代码区只读段存放函数体的二进制代码 2.图片介绍 3.代码介绍
(1)堆比栈的地址更低 (2)堆区是动态分配的地址不一定连续 (3)全局变量在堆之下 (4)静态变量 和 全局变量是混合存放的。先定义的在低地址。
//memory_layout.cpp
#include stdio.h
#include iostream
using std::cout;
using std::endl;int global_num 1;int main()
{int num 1; //栈变量cout 栈变量1的地址 : num endl; //输出栈变量的地址:0x7ffc2050a440int num2 2; //栈变量cout 栈变量2的地址 : num2 endl; //输出栈变量的地址:0x7ffc2050a444int *p new int(1); //堆变量cout 堆变量的地址 : p endl; //输出堆变量的地址:0x56bb74428280int *p2 new int(2); //堆变量cout 堆变量2的地址 : p2 endl; //输出堆变量的地址:0x56bb744282a0//对比发现,堆变量的地址比栈变量低//即堆变量是低地址栈变量是高地址cout 全局变量的地址: global_num endl; //0x56bb73306010static int static_num 1;cout 静态变量的地址: static_num endl; //0x56bb73306014//对比可以发现全局变量和静态变量是混合存放的。略低于堆区const char * pstr hello;cout pstr endl; //hello cout会默认重载char *printf(文字常量区的地址:%p\n, pstr); //0x56012fd1ddabcout 文字常量区的地址: static_castvoid *(const_castchar*(pstr))endl;//发现文字常量区比全局静态区的地址更低printf(main函数的地址:%p\n,main);//发现程序代码段比文字常量区更低return 0;
}