对我本人来说,学习任何一种高级语言,总想知道高级语言是如何被编译并载入内存的,一个程序的运行,在计算机内存中是怎样组织的等等问题,总想打破砂锅问到底,有好多疑问,因此我就学习了汇编语言,汇编语言确实让你能了解很多底层的东西,它可以直接跟寄存器接触,内存单元接触,自己创建一个栈空间,也可以自己编写安装自己需要的中断例程,让中断向量表相应的入口地址指向自己编写安装的中断例程,让你了解什么是端口,怎样通过汇编指令对这些端口进行读写,让你了解键盘即鼠标的工作原理,自己编写键盘程序等等,确实很有意思,但是汇编有优点,缺点也不少,这里不多说,毕竟主要讲的是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程序在内存中组织方式的简要介绍。
前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来...
在比较服务器托管和云服务之前,有必要先了解下云服务的概念。云服务是现在流行...
前言 Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛。s...
很多站长选择业务搭载平台时,会更多地考虑网站服务器租用价格。而趋于平价化的...
无服务器架构(Faas/Serverless),是软件架构领域的热门话题。 AWS,Google Cloud...
什么样的人才会迟到?一种是智商余额不足的,另一种是有底气的人。超融合发展到...
专注于文本文档的组织在简化业务流程方面有了一个新的盟友。自然语言处理(Natura...
北京忆恒创源科技有限公司(Memblaze)今天宣布推出PBlaze5 920系列企业级NVMeSSD...
在经历空前的一年后,医疗保健行业CIO们表示,他们将加倍努力为患者和医疗服务提...
Google 为了应对快速增长的数据处理,开发了一套算法。后来有人根据算法的思想,...