C程序在内存中的组织方式

存储 存储软件 前端
学习任何东西,都不能了解就好,不能一知半解,毕竟大二全不如小而精,人才都是精通某一领域,在某一领域上作出贡献,更不能没信心,一有难题解决不了,就失去信心,从而放弃,那是绝不可取的,如果这样那么一辈子也做不了什么事。

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

[[220437]]

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

责任编辑:武晓燕 来源: 今日头条
相关推荐

2010-01-25 14:56:08

C++程序

2018-08-24 10:16:23

内存浮点数存储

2022-08-06 16:33:01

C语言数组内存

2010-05-27 10:05:08

EhcacheJava云计算

2010-01-25 18:15:52

2019-01-07 10:24:41

2024-01-18 08:38:34

.NET数组内存管理

2020-09-18 09:16:37

Redis缓存内存

2020-11-16 09:28:41

函数内存

2011-06-16 09:28:02

C++内存泄漏

2023-11-17 11:40:51

C++内存

2020-03-18 12:23:49

C语言编程语言

2020-03-17 17:49:58

C语言编程语言

2010-02-03 14:10:28

C++内存逻辑区域

2010-02-04 15:41:10

C++内存管理

2024-01-09 09:23:12

指针C++

2009-06-18 11:48:07

Struts2POI生成文件

2019-09-29 00:25:11

CC++内存泄漏

2011-08-29 10:35:53

反射方式C#

2009-01-16 09:58:07

C#编程C#内存管理垃圾收集
点赞
收藏

51CTO技术栈公众号