C/C++内存区域分析
来源:互联网 发布:yy协议软件手机版 编辑:程序博客网 时间:2024/06/01 08:57
操作系统核心占用了3G到4G之间的内存区域,这段区域的内存是不可操作的,当我的程序访问到这块内存中时,程序就会报错。0G到3G之间的内存空间由栈存储区、共享库/动态库、堆存储区、BSS区、DATA区、RO.DATA区、TEXT区占用。栈存储区一般存储成员变量,自动释放回收;linux中的共享库,windows中的动态库,比如libc,这段区域是可读不可写的;堆存储区,C语言中通过malloc函数分配空间的变量存储,C++中通过new关键字修饰的变量存储的区域;BSS区存储为初始化的全局变量;DATA区存储已初始化的全局变量;RO.DATA区存放只读数据;TEXT区存放机器二进制指令,就是当我们的代码被编译成二进制指令之后就会存放在TEXT区中;
如图所示,打印出变量a的地址是:0x804a024,是个低地址,a是已初始化的全局变量,保存在DATA区中;打印出b变量的地址是:0x804a02c,也是个低地址,b是未初始化的全局变量,保存在BSS区中,DATA区和BSS区是紧挨着的,两个地址值很接近;打印变量c的地址是:0xffc725ac,是个高地址,c是局部变量,所以存储在栈存储区中,栈存储区紧挨着3G,所以地址为高地址;str1是个指针变量,显示打印str1字符串的首地址为:0x80485e0,字符串储存在RO.DATA区中,为只读数据区,字符串是个常量;&str1打印的是指针的地址为:0xffc725b0,指针变量str1存储在栈存储区中;str2打印的是str2字符数组的地址,字符数组的地址打印出来也就是字符数组的首地址,为0xffc725b6,它是一个栈存储区的地址;&str2打印的是字符数组的首地址,也为0xffc725b6。
- C/C++内存区域分析
- Java内存区域分析
- Java内存区域分析
- java的内存区域分析
- JVM系列文章(一):Java内存区域分析
- JVM系列文章(一):Java内存区域分析
- JVM系列文章(一):Java内存区域分析
- 深入理解JVM--java内存区域分析
- c内存
- C内存
- C 内存
- C-内存
- 【C/C++】内存对齐
- 【c/c++】内存地址
- 【java基础 7】java内存区域分析及常见异常
- 【基础C&C++】内存函数
- 内存相关(C/C++)基础知识
- C++/C有关内存思考题
- 编译安装bind
- MOOC清华《VC++面向对象与可视化程序设计》第1章:空白窗口的创建(Win32项目)
- [洛谷]P1080 国王游戏
- hdu 3371 Connect the cities (prim)
- 数据仓库
- C/C++内存区域分析
- 【Java并发编实战】基础构建模块与任务执行
- L3-004. 肿瘤诊断
- 泵韩ugchujfgch
- 2017 acmicpc 北京网络赛 IMinimum(线段树求区间最值)
- 【Tensorflow】tf.placeholde函数解释与用法
- 图解HTTPS协议加密解密全过程
- 【牛客】星际穿越
- kubernetes init-container