让我们逐一分析代码中的变量和数据,确定它们在内存中的位置:
#include#includeint GlobalVar = 1; // 数据段(静态区)static int StaticglobalVar1 = 1; // 数据段(静态区)
int main() {static int staticglobalVar2 = 1; // 数据段(静态区)int partVar; // 栈区char arr[] = "abcdef"; // 栈区int str1 = (int)malloc(sizeof(int) 5); // 堆区int str2 = (int)malloc(sizeof(int) 5); // 堆区
if (str1 == NULL || str2 == NULL) { perror("malloc()"); return 1;}free(str1); // 释放堆区内存free(str2); // 释放堆区内存str2 = NULL; // 栈区(指针本身)str1 = NULL; // 栈区(指针本身)return 0;}
现在,让我们详细解释每个变量和数据在内存中的位置:
GlobalVar:
类型:全局变量位置:数据段(静态区)原因:全局变量在程序开始时初始化并存放在数据段,直到程序结束才被释放。
StaticglobalVar1:
类型:静态全局变量位置:数据段(静态区)原因:静态全局变量与普通全局变量类似,存放在数据段,生命周期贯穿整个程序运行期间。
staticglobalVar2:
立即学习“C++免费学习笔记(深入)”;
类型:静态局部变量位置:数据段(静态区)原因:静态局部变量在程序开始时初始化并存放在数据段,生命周期也贯穿整个程序运行期间。
partVar:
类型:局部变量位置:栈区原因:局部变量在函数调用时分配在栈区,函数结束时自动释放。
arr:
奇域
奇域是一个专注于中式美学的国风AI绘画创作平台
30 查看详情
类型:局部数组位置:栈区原因:局部数组在函数调用时分配在栈区,函数结束时自动释放。
str1:
类型:动态分配的内存指针位置:堆区(指向的内存),栈区(指针本身)原因:
malloc函数在堆区分配内存,str1本身是一个指针,存放在栈区。str2:
类型:动态分配的内存指针位置:堆区(指向的内存),栈区(指针本身)原因:与
str1相同,malloc在堆区分配内存,str2本身存放在栈区。字符串常量 "abcdef":
类型:字符串常量位置:数据段(静态区)原因:字符串常量在编译时被存放在数据段。
代码段:
位置:代码段原因:包含
main函数的二进制代码。总结:
数据段(静态区):
GlobalVar,StaticglobalVar1,staticglobalVar2, 字符串常量 "abcdef"栈区:partVar,arr,str1(指针本身),str2(指针本身)堆区:str1(指向的内存),str2(指向的内存)代码段:main函数的二进制代码
以上就是c++/c++中内存空间区域划分划分的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/432204.html
奇域
微信扫一扫
支付宝扫一扫