C程序的存储空间布局】的更多相关文章

正文段 指的是由CPU执行的机器代码,通常,正文段是可以共享的,执行的程序在存储器中只有一个副本.通常也是只读的,防止程序本身被修改. 初始化数据段 数据段,被明确赋值的变量,比如全局变量 非初始化数据段 程序开始执行前,内核将此段中的数据初始化为0或者空指针,比如出现在函数外的C声明. 栈 自动变量以及每次函数调用是所需保存的信息都存放在此段中.每次调用函数时,其返回地址.调用者的环境信息都存放在新分配的栈中.因此一个函数调用实例的变量改变不会影响另一个函数调用实例的变量. 堆 动态存储的分配…
从历史上讲,C程序一直由下面几部分组成: 正文段.这是由CPU执行的机器指令部分.通常,正文段是可共享的,所以即使是频繁执行的程序(如文本编辑器.C编译器和shell等)在存储器中也只需有一个副本,另外,正文段常常是只读的,以防止程序由于意外而修改其自身的指令. 初始化数据段.(所有带有初始值的全局变量)通常将此段称为数据段,它包含了程序中需明确地赋初值的变量.例如,C程序中出现在任何函数之外的声明: int maxcount = 99: 使此变量带有其初值存放在初始化数据段中. 非初始化数据段…
历史沿袭至今,C程序一直由下列几部分组成: 1. 正文段.这是由CPU执行的机器指令部分.通常,正文段是可共享的,所以即使是频繁执行的程序(编辑器,编译器,命令解释器)在存储器中也只需一个副本,另外正文段常常是只读的,以防止程序由于意外而修改 其指令. 2. 初始化数据段.通常将此段称为数据段,它包含了程序中需要明确地赋初值的变量.例如,C程序中任何函数之外的声明:int maxcount = 99; 3. 未初始化数据段.通常将此段称为bss段,这一名称来源于早期汇编程序一个操作符,意思是“由…
一个程序本质上都是由 BSS 段.data段.text段三个组成的.可以看到一个可执行程序在存储(没有调入内存)时分为代码段.数据区和未初始化数据区三部分. BSS段(未初始化数据区):在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段:在采用段式内存管理的架构中,数据段(data segment)通常是指用来存放程序中已初始化的…
前言 C语言程序的执行必定需要耗费一定的资源,也就是说,程序在计算机内部的映像不可能就单单代码. 本文将讲解C语言程序在计算机内部的存在方式. 程序存储空间 1. 正文段:程序的机器指令部分 2. 初始化的数据:已经明确赋值的变量的值 3. 非初始化的数据:为赋值的变量的值 4. 栈:存放自动变量以及每次函数调用时所需保存的信息 5. 堆:用来实现动态分配内存( malloc new 等函数相关 )…
被隐藏了的过程 现如今在流行的集成开发环境下我们很少需要关注编译和链接的过程,而隐藏在程序运行期间的细节过程可不简单,即使使用命令行来编译一个源代码文件,简单的一句"gcc hello.c"命令就包含了非常复杂的过程. #include<stdio.h> int main() { printf("Hello word\n"); ; } 在Linux系统下使用gcc编译程序时只须简单的命令: $gcc hello.c $/a.out Hello word…
1. 使用HashMap编写一程序实现存储某班级学生信息,要求在屏幕上打印如下列表 学号   姓名   性别   年龄 001    张三   男      23 002    李四   男      22 要求:学生信息有用户输入,且提供检索.删除操作 Student类代码,对学生信息进行封装 public class Student { /**学号.姓名.性别.年龄*/ private int id; private String name; private char sex; privat…
每个程序一启动都有一个大小为4GB的内存,这个内存叫虚拟内存,是概念上的,真正能用到的,只是很小一部分,一般也就是在几百K到几百M.我们PC中内存,我们称之为物理内存,也就是256M,512M等,虚拟内存和物理内存的如何转换是由操作系统完成的,我们不需要管它.我们只需要管好我们自己程序的那4GB内存就可以了. 要管理4GB的虚拟内存,就必须给每个字节分配一个号码,以便程序与访问到其中任何一个字节.这个号码是从0开始顺序递增的,针对于这个号码我们就称之为地址,从0x00000000-0xFFFFF…
1.语句和表达式 计算机程序是一组告诉计算机什么的指令,每一个指令称为语句. 2.指定变量类型 变量名.变量存储的信息类型 整型int(-2.14*109~2.14*109).浮点型float(38位十进制数).double(300位十进制数) Char.String,在程序中使用字符值时,必须用单引号将赋给变量的字符值括起来,而对于字符串值必须用双引号括起来 用等号 "=" 赋值,在JAVA程序中,可以用这种方法给任何变量赋值 尽管其他变量类型都是小写字母(int .float.ch…
可编程序中的存储区域基本上分为:静态存储区,栈区,堆区,代码区. 1.静态存储区(全局存储区):该块内存在程序编译期间就已经分配好,并且在程序运行期间都一直存在,主要用于存储静态数据,全局数据和常量. 被static修饰的局部变量存储在这里,普通的局部变量存储在栈里. 2.栈:编译器在需要的时候再分配内存,里面通常存储普通的变量,并且它的内存分配运算是内置于处理器上的,执行效率很高. 3.堆:它的内存由程序管理,存储的一般时new,alloc 出来的对象.动态分配内存. 4.代码区:存放二进制代…