用size命令分析linux程序内存段的分布
来源:互联网 发布:mac 推出硬盘 编辑:程序博客网 时间:2024/05/22 15:30
Size命令的输出不包括stack和heap的部分。只包括文本段(text), 代码段(data),未初始化数据段(bss)三部分。
1、文本段:包含程序的指令,它在程序的执行过程中一般不会改变。
2、数据段:包含了经过初始化的全局变量和静态变量,以及他们的值。
3、BSS段:包含未经初始化的全局变量和静态变量。
4、堆栈段:包含了函数内部声明的局部变量。当然,上面段的作用不仅于此,具体的作用
int main()
{
}
[root@pc201 ccodes]# size a.out
-------------------------------
[root@pc201 ccodes]# cat test.c
int g_data;
int main()
{
}
[root@pc201 ccodes]# size a.out
原始内存分布: text data bss dec hex filename 960 248 8 1216 4c0 a.out
[root@pc201 ccodes]# size a.out
论1:未初始化的全局变量保存在BSS段
-------------------------------
[root@pc201 ccodes]# cat test.c
int g_data=1;
int main()
{
}
[root@pc201 ccodes]# size a.out
原始内存分布: text data bss dec hex filename 960 248 8 1216 4c0 a.out
[root@pc201 ccodes]# size a.out
论2:经过初始化的全局变量保存在数据段中
-------------------------------
[root@pc201 ccodes]# cat test.c
int main()
{
}
[root@pc201 ccodes]# size a.out
原始内存分布: text data bss dec hex filename 960 248 8 1216 4c0 a.out
[root@pc201 ccodes]# size a.out
论3:未初始化的静态变量保存在BSS段中
--------------------------------
[root@pc201 ccodes]# cat test.c
int main()
{
}
[root@pc201 ccodes]# size a.out
原始内存分布: text data bss dec hex filename 960 248 8 1216 4c0 a.out
[root@pc201 ccodes]# size a.out
论4:经过初始化的静态变量保存在数据段中
-------------------------------
[root@pc201 ccodes]# cat test.c
int main()
{
}
[root@pc201 ccodes]# size a.out
原始内存分布: text data bss dec hex filename 960 248 8 1216 4c0 a.out
[root@pc201 ccodes]# size a.out
论5:函数内部声明的局部变量保存在堆栈段(text)
------------------------------
[root@pc201 ccodes]# cat test.c
const int g_data=1;
int main()
{
}
[root@pc201 ccodes]# size a.out
原始内存分布: text data bss dec hex filename 960 248 8 1216 4c0 a.out
[root@pc201 ccodes]# size a.out
论6:const修饰的全局变量保存在文本段
------------------------------
[root@pc201 ccodes]# cat test.c
int main()
{
}
[root@pc201 ccodes]# size a.out
原始内存分布: text data bss dec hex filename 960 248 8 1216 4c0 a.out
[root@pc201 ccodes]# size a.out
结论7:const修饰的局部变量保存在堆栈段
------------------------------
[root@pc201 ccodes]# cat test.c
char *pstr="";
int main()
{
}
[root@pc201 ccodes]# size a.out
[root@pc201 ccodes]# cat test.c
char *pstr="123456789";
int main()
{
}
[root@pc201 ccodes]# size a.out
原始内存分布: text data bss dec hex filename 960 248 8 1216 4c0 a.out
[root@pc201 ccodes]# size a.out
以发现,前后数据段和BSS段大小均未发生变化,而文本段增加了9个字节。
论8:字符串常量保存在文本段
结论
1、经过初始化的全局变量和静态变量保存在数据段中。
2、未经初始化的全局变量和静态变量保存在BSS段。
3、函数内部声明的局部变量保存在堆栈段中。
4、const修饰的全局变量保存在文本段中,const修饰的局部变量保存在堆栈段中。
5、字符串常量保存在文本段中。
本文转自:
http://blog.sina.com.cn/s/blog_53fab15a01019lbq.html
阅读全文
0 0
- 用size命令分析linux程序内存段的分布
- 用size命令分析linux程序内存段的分布
- 用size命令分析linux程序内存段的分布
- linux size 命令分析linux程序内存段的分布
- 用size命令分析linux程序内存段的分布 (2013-02-18 14:12:23)
- linux下的程序内存分布 代码段,数据段,BSS段,.rodata段,堆,栈
- 程序内存分布分析
- [Linux] ls和size命令以及程序内存映像、磁盘映像的理解
- [Linux] ls和size命令以及程序内存映像、磁盘映像的理解
- [Linux] ls和size命令以及程序内存映像、磁盘映像的理解
- 程序的内存分布
- 程序的内存分布
- 程序的内存分布
- Linux开发心得总结17 - Linux程序数据段分布分析
- 【操作系统】Linux中C程序的内存分布情况
- 可执行程序的内存分布
- c程序的内存分布
- C程序的内存分布
- JavaScript图片上传前预览
- Spark2.1.0 + CarbonData1.0.0+hadoop2.7.2集群模式部署及使用入门
- 用户名和密码正则验证。
- java类方法覆盖
- java整合SSM注解开发org.springframework.beans.factory.NoSuchBeanDefinitionException
- 用size命令分析linux程序内存段的分布
- 第二章 Spring MVC入门 —— 跟开涛学SpringMVC
- leetcode 287. Find the Duplicate Number 双指针 + 快慢指针
- TCP三次握手/四次挥手
- strchr函数
- js删除不用的数组中的数字
- 腾讯FPGA云-背后的技术
- python问题
- Python的编码注释# -*- coding:utf-8 -*-