由图可见,左侧为代码,右侧则为我们模拟出来的内存格式。从上到下依次为:内核空间、栈、内存映射段、堆、数据段和代码段。
其中,内核空间是我们用户代码无法编写的部分,所以暂时不讨论。
栈区(stack),它是向下增长的,在执行函数的时候,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元被自动释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存有限。栈区主要存放的是运行函数而分配的局部变量、函数参数、返回数据、返回地址等。
内存映射段则是用来进行文件映射,动态库、匿名映射等操作的。
堆区(heap),与栈区相反,它是向上增长的,其中存储的是由程序员分配与释放的空间,若程序员不进行释放。则会在程序结束时由OS回收,其分配的方式类似于链表。
数据段,又被成为静态区(static),用于存放全局变量,静态数据。程序结束后由系统释放。
代码段,用于存放函数体(类成员函数和全局函数)的二进制代码。
以上就是C/C++程序内存开辟的详细内容。
期待各位的点赞,评论与收藏!如有表述错误以及内容错误,还请各位大佬斧正。