关于c语言不同类型变量存放位置的个人理解
2016-12-30 14:34
666 查看
1 首先可以认为代码分成一下几段:
1text段(用来存放代码)
2data段
3bss段 (用来存放未初始化和初始化为0的全局变量)
该段在运行初始化时编译器会将bss段全部清0,所以全局变量没有初始化时值为0
而不是一个随机值
4 heap(堆:用来动态内存分配)
5 stack(栈:用来存放局部变量)
栈是反复被调用的,所有局部变量的值是不确定的。
堆在用完之后释放也不会清0,所以再次申请一块内存时,一般要先初始化为0
2 关于data段可以分为下面几类:
1静态局部变量和全局变量的存储地方是一样的,未初始化或者初始化为0的定义在bss段,初始化不为0的定义在data段
2其他段(用来存放初始化值不为0的全局变量)
3 关于data段和bss段的大小是编译器根据实际情况自动分配的。
4以上都是自己的理解,可能有误
有些数据可能被存放在代码段 如下:
char *p = "linux";
// const char *p = "linux";// 最正确的写法应该是这个
1text段(用来存放代码)
2data段
3bss段 (用来存放未初始化和初始化为0的全局变量)
该段在运行初始化时编译器会将bss段全部清0,所以全局变量没有初始化时值为0
而不是一个随机值
4 heap(堆:用来动态内存分配)
5 stack(栈:用来存放局部变量)
栈是反复被调用的,所有局部变量的值是不确定的。
堆在用完之后释放也不会清0,所以再次申请一块内存时,一般要先初始化为0
2 关于data段可以分为下面几类:
1静态局部变量和全局变量的存储地方是一样的,未初始化或者初始化为0的定义在bss段,初始化不为0的定义在data段
2其他段(用来存放初始化值不为0的全局变量)
3 关于data段和bss段的大小是编译器根据实际情况自动分配的。
4以上都是自己的理解,可能有误
有些数据可能被存放在代码段 如下:
char *p = "linux";
// const char *p = "linux";// 最正确的写法应该是这个
相关文章推荐
- 大型分布式C++框架《三:序列化与反序列化》
- c语言数组
- 大型分布式C++框架《二:大包处理过程》
- 大型分布式C++框架《一:框架简介》
- FFMPEG系列课程(二)读取视频帧
- 简单的C++加载jvm实现--简单的日志输出
- string 的基础用法
- [置顶] openwrt下ngrok命令缺少libstdc++库的问题 can't load library 'libstdc++.so.6'
- poj 2388 c++:寻找中位数
- C语言野指针
- C语言野指针
- 获取一个整数所有的质因数(C语言实现)
- 算法提高 周期字串
- 乘法口诀表(C语言实现)
- 乘法口诀表(C语言实现)
- 完全平方数(C语言实现)
- 完全平方数(C语言实现)
- 如何在ANDROID JNI 的C++中打Log
- BCGCONTROLBAR中文菜单栏乱码情况解决方法
- Leetcode 416. Partition Equal Subset Sum (Medium) (cpp)