对我本人来说,学习任何一种高级语言,总想知道高级语言是如何被编译并载入内存的,一个程序的运行,在计算机内存中是怎样组织的等等问题,总想打破砂锅问到底,有好多疑问,因此我就学习了汇编语言,汇编语言确实让你能了解很多底层的东西,它可以直接跟寄存器接触,内存单元接触,自己创建一个栈空间,也可以自己编写安装自己需要的中断例程,让中断向量表相应的入口地址指向自己编写安装的中断例程,让你了解什么是端口,怎样通过汇编指令对这些端口进行读写,让你了解键盘即鼠标的工作原理,自己编写键盘程序等等,确实很有意思,但是汇编有优点,缺点也不少,这里不多说,毕竟主要讲的是C语言。

学习任何东西,都不能了解就好,不能一知半解,毕竟大二全不如小而精,人才都是精通某一领域,在某一领域上作出贡献,更不能没信心,一有难题解决不了,就失去信心,从而放弃,那是绝不可取的,如果这样那么一辈子也做不了什么事。算了,侃这么多跟标题无关的事,请大家原谅,下面正式介绍一下C语言在内存中的组织方式,其实没有过多要讲,但是还是介绍一下吧!

一个可以执行的C程序,一般说来有四个区域组成,哪四个呢?你猜?当然不可能要你猜,猜是猜不着的,那就说出来吧:①、代码段,程序运行时执行的机器指令,何为机器指令,也就是一连串的二进制数,电脑认不得高级语言,必须被编译等阶段转换成二进制机器指令才能被机器所知晓,如if(a>b)…,它也会被编译成机器指令(二进制代码),具体是什么样的机器指令,说实话我也不太清楚。②、静态数据区,包含程序运行周期中一直存在的数据,比如全局变量和静态变量,什么字符串常量啊,等等。③、堆区:程序运行时动态分配的存储空间,一般由程序员分配和释放,比如用malloc、calloc等。堆的分配方式类似于链表(以后会说到),但是它跟数据结构中的堆不是一回事,完了,差点又跑偏了,不说了。④、当然就是堆栈中的栈了,一般由系统自动分配,其包含函数的调用信息,存放函数的参数值,还有就是局部变量的值,操作方式跟数据结构中的栈很类似。

举个类子:

int a; ①

char b; ②

int main(){

int b=10; ③

static int n=2; ④

char c[]={'a','b'}; ⑤

char *p="i love you"; ⑥

int *p=(int *)malloc(sizeof(int)); ⑦

}

上面一段程序①跟②,因为是全局变量,很容易想到它们在静态数据区。③处的数据因为是局部的,所以在栈区,④嘛,因为有static修饰符修饰,静态局部变量故在静态数据区,⑤不要说,也是在栈区,局部字符数组,也是局部变量。⑥有所区别,指针变量p毋庸置疑在栈区,但是后面的i love you是常量字符串,却在静态数据区。指针变量p指向字符串常量。⑦不多说,在堆区。

以上就是关于C程序在内存中组织方式的简要介绍。

【编辑推荐】

【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0

组织c语言程序的是什么,C程序在内存中的组织方式相关推荐

  1. C语言int类型和float浮点型数据在内存中的存储方式

    int 类型在内存中占4个字节,而一个字节是8个比特位,所以int类型占32个比特位. float类型在内存中同样也占4个字节,所以其也是占32个比特位. 一个比特位就是一个0或1,所以其在二进制位数 ...

  2. C语言的数据类型大全,整型数据在内存中的存储方式

    一.数据类型 通过长时间的学习C语言以及代码的编写,我掌握了很多很多的数据类型,下面就给大家罗列一下. 1.内置数据类型 char        //字符数据类型--                  ...

  3. 【C语言】浮点型数据在内存中的存储方式

    目录 一. 前言 二. 问题的引出 三. 两类浮点型数据(float.double)在内存中的存储方式 3.1 两类浮点型数据的存储模型 3.1.1 浮点型数据数值读取的通用模型 3.1.2 floa ...

  4. c语言double数据存储形式,C语言 float、double数据在内存中的存储方式

    float在内存中占4个字节(32bit),32bit=符号位(1bit)+指数位(8bit)+底数位(23bit) 指数部分 指数位占8bit,可以表示数值的范围是0-(表示0~255一共256个数 ...

  5. C语言浮点数据在内存中的存储方式

    float在内存中的存储遵循IEEE 754标准.在C/C++中,float类型占4个字节即32位 , 这32位分成了3部分: 符号位最为简单,如果你存储的是正数那么符号数就是0.如果是负数,则为1. ...

  6. 【C语言数组】数组的创建和初始化 内存中的存储 冒泡排序 sizeof 数组名

    test 一.一维数组的创建和初始化 1.数组的创建 2.数组初始化 2.1.不完全初始化 2.2.不初始化 3.一维数组的使用 3.1.用下标打印1-10 3.2.sizeof 计算数组的元素个数 ...

  7. windows和linux存储float,C语言float型数据在内存中的储存方式

    菜单导航/URHere/面包屑,通过CSS中的content简洁表达代码 比如我们要写一个菜单导航/URHere/面包屑,如: 首页 > 个人中心 > 修改密码 代码: tolua杂记 1 ...

  8. C语言程序设计 | 整型、浮点型在内存中的存储方式

    整型在内存中的存储 一个变量的创建要在内存中开辟空间,空间的大小是根据不同的类型决定的. 那数据在数据在所开辟的空间中是如何存储的呢? 首先我们要了解三个概念: 原码 反码 补码 计算机中的有符号数有 ...

  9. linux lsm 程序加载钩函数,LSM在Linux中的实现方式

    LSM(Linux Secure Model)一种轻量级访问控制机制. 其实现方式有如在系统调用中加入一个后门.... 方式如下: static struct file *__dentry_open( ...

最新文章

  1. 在Linux系统中修改目录的权限如何恢复
  2. h5如何动态获取键盘高度_动态获取键盘高度
  3. java B2B2C springmvc mybatis电子商务平台源码-Spring Cloud Security
  4. 二叉查找树Java实现代码
  5. PHP在程序处理过程中动态输出内容
  6. python高级特性:迭代器与生成器
  7. nginx 怎么重新编译安装mysql,centos 下 编译安装 nginx + mysql + php 服务
  8. MySQL数据库选型
  9. 支付系统架构模块划分与设计
  10. 交换机基本原理以及配置
  11. win2003桌面图标蓝底去除
  12. 成人, 像婴儿那样心无旁骛地学习
  13. 唯品会的服务化[转]
  14. 数据挖掘之对河南省的疫情分析
  15. ubuntu 命令行卸载并清理软件(卸载的很干净)
  16. 网络运维系列:二级域名启用与配置
  17. mui从iframe页面跳转到应用根目录页面
  18. Kafka中的HW、LEO、LSO等分别代表什么?
  19. 分布式和大数据有什么区别?
  20. 项目管理工具——SWOT分析法

热门文章

  1. 和push的区别_RocketMQ的消息订阅push和pull的区别
  2. 使TextView里面的文字滚动起来
  3. @property 各个属性作用【使用时最需注意strong/weak类型】【补充部分内存知识】...
  4. 解决Windows和Ubuntu时间不一致的问题
  5. listview的item中嵌套多个EditText时的问题
  6. 判断点是否在两个多边形之间
  7. 继承类 基类的赋值_Chapter10:继承与派生(四)
  8. 10.11.5 brew mysql_Mac OS10.11下mysql5.7.12 安装配置方法图文教程
  9. 初探下一代SIEM核心技术发展趋势
  10. 网络协议:TCP滑动窗口