C 程序的存储空间布局
1. 存储空间布局
static int g_init = 1; // data 段
static int g_uninit; // bss 段int main() { static int s_init = 1; // data 段static init s_uninit; // bss 段return 0;
}
历史沿袭至今,C 程序一直由下列几部分组成:
正文段(text)
这是由 CPU 执行的机器指令部分。通常,正文段是可以共享的(只读),所以,即使是频繁执行的程序(如文本编辑器,C 编译器和 Shell 等)在存储器中也只有一个副本。
初始化数据段(data)
包含了程序中需明确地赋初值的变量。例如,C 程序中任何函数之外(全局函数)的声明:
int maxcount = 99;
包含了经过初始化的全局变量和静态变量,以及他们的值。
未初始化数据段(bss)
内核将此段中的数据初始化为 0 或空指针。
包括,包含未经初始化的全局变量和静态变量。
栈(stack)
堆(heap)
通常在堆中进行动态存储分配。堆位于未初始化数据段和栈之间。
对于 32 位 Intel X86 处理器上的 Linux,正文段从 0x08048000 单元开始,栈底则在 0xC000000 之下开始(在这种特定结构下,栈从高地址向低地址方向增长)。堆顶和栈顶之间未用的虚地址空间很大。
未初始化数据段的内容并不存放在磁盘程序文件中,原因在于,内核在程序开始运行前将它们都设置为 0. 需要存放在磁盘程序文件中的只有正文段和初始化数据段。
2. 用 size 命令分析 linux 程序内核段的分布
size 命令的输出不包括 stack(栈) 和 heap(堆) 的部分。只包括文本段(text), 数据段(data),未初始化数据段(bss)三部分。
$ size /usr/bin/cc /bin/shtext data bss dec hex filename
900967 8032 9696 918695 e04a7 /usr/bin/cc
143301 4792 11312 159405 26ead /bin/sh
C 程序的存储空间布局相关推荐
- 7.6 C程序的存储空间布局
7.6 C程序的存储空间布局 由于历史原因,C程序一直由下列几部分组成: • 正文段.这是由CPU执行的机器指令部分.通常,正文段是可共享的,所以即使是经常执行的程序(如文本编辑程序.C编译程序.sh ...
- C++程序的存储空间布局
原文地址:http://ju-kevin.spaces.live.com/blog/cns!907BD90CD611C0C7!217.entry(已不能访问) 转载地址:http://blog.sin ...
- Linux size命令和C程序的存储空间布局
size - list section sizes and total size是GNU Development Tools,列出目标文件各个部分所占的字节数,当不输入目标文件时,将会把a.out文件 ...
- C程序的存储空间布局
系统空间: 为内核保留,不允许应用程序读写该区域的内容或直接调用内核代码定义的函数. 内核总是驻留在内存中,是操作系统的一部分. 系统中所有进程对应的虚拟地址空间的内核区都会映射到同一块物理内存上(系 ...
- C语言存储空间布局以及static解析
本文我将采用Linux环境测试C语言存储空间布局,以及采用VC6.0来测试static的常见用法.采用linux环境来测试c语言存储空间布局,是因为Linux很容易利用shell命令中的size命令查 ...
- C语言存储空间布局以及static详解
本文我将采用Linux环境测试C语言存储空间布局,以及采用VC6.0来测试static的常见用法.采用Linux环境来测试C语言存储空间布局,是因为Linux很容易利用shell命令中的size命令查 ...
- C语言实现数据文件怎么找,急求如何将下列C语言程序数据存储到文件中?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中. #include int ...
- c语言程序怎么颠倒数据,急求如何将下列C语言程序数据存储到文件中?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中. #include int ...
- 如何保存文件为c语言格式,急求如何将下列C语言程序数据存储到文件中?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中. #include int ...
最新文章
- layoutSubviews何时被调用
- webservice入门程序学习中经验总结
- linux 信号量锁 内核,Linux内核中锁机制之信号量、读写信号量
- ThinkSNS 仿蘑菇街 社区购物分享系统
- C++简介源码讲解精辟版,C++入门级C++学习,C++与C的区别值得知晓
- 信息学奥赛一本通 2068:【例2.6】鸡兔同笼
- 黑马公开课——运行原理与GC学习笔记
- win10 后台运行jar包_小编演示win10系统双击运行jar文件的教程
- Konomi与去中心化借贷协议bZx合作推动DeFi生态发展
- 菜鸟学EJB(二)——在同一个SessionBean中使用@Remote和@Local
- 114.maven+springmvc+spring+mybaties 项目整合
- 环比同比YOY\QoQ及QQ\PP图Q-Q\P-P…
- 开发规约:接口统一返回值格式 [resend]
- google身份验证器
- 详解JVM之双亲委派机制
- 密码学实验-RSA算法的几种攻击方法的实现
- linux上远程文件传输工具 scp sz rz
- 【解决方案】国标GB28181协议视频智能分析平台打造智慧企业AR云景解决方案
- nancy中的身份验证
- 无约束多维极值求解思路
热门文章
- 电子科大计算机操作系统ppt,电子科大计算机操作系统实验报告级.docx
- aix c语言 构造函数,错误:命名构造函数,而不是类型。使用g++4.6.1进行编译
- Spark面试:Spark on yarn 运行流程
- thinkpython2e电子书下载_《Think Python 2e》中译版电子书分享
- java求最大子数组 (分治算法)
- OpenCV精进之路(零):core组件——Mat和IplImage访问像素的方法总结
- [USACO10MAR]伟大的奶牛聚集
- 面试题:计算 n!阶乘的结果的末尾有几个0
- newgrp - 登录到新的用户组中
- 网站搭建 (第01天) 模型设计