对于我来说,在学习任何高级语言的时候,总是想知道高级语言是如何编译加载到内存中的,一个程序在计算机内存中是如何运行的。组织等问题,总想打破砂锅问底线。我有很多问题,所以我学习了汇编语言。汇编语言确实能让你理解很多底层的东西。可以直接联系寄存器,内存单元,自己创造。一个栈空间,还可以编写和安装你需要的中断例程,让中断向量表对应的入口地址指向你编写和安装的中断例程,这样你就可以明白端口是什么以及如何读写这些端口通过汇编指令,让你了解键盘和鼠标的工作原理,自己写键盘程序等等,确实很有趣,但是汇编有利也有弊,这里就不多说了,毕竟,主要讲C语言。学任何东西,不懂就好,不是一知半解。毕竟大二不如小好。人才精通某一领域,在某一领域做出贡献,更谈不上有信心。失去信心而放弃是绝对不可取的。如果你这样做,你将无法在你的生活中做任何事情。算了,请原谅我说了这么多与标题无关的东西。下面正式介绍一下C语言在内存中的组织方式。其实也不多说,还是先介绍一下吧!一个可执行的C程序,一般来说,有四个区域,哪四个?你猜呀?当然,你猜是不可能的,猜是不可能的,那么说吧:①、代码段,程序运行时执行的机器指令,什么是机器指令,也就是一串二进制数,计算机无法识别高级语言,必须通过编译阶段将其转化为二进制机器指令才能被机器识别,比如if(a>b)...,也会被编译成机器指令(二进制代码),什么样的机器指令,老实说,我不知道不确定。②、静态数据区,包括程序运行周期中一直存在的数据,比如全局变量和静态变量,什么字符串常量等。③。堆区:程序运行时动态分配的存储空间,一般由程序员分配和释放,如使用malloc、calloc等。堆的分配方式类似于链表(后面会讲到),但它和数据结构中的堆不一样。④.当然是栈中栈,一般是系统自动分配的。它包含函数调用信息,存储函数参数值和局部变量的值。操作方法很像数据结构中的栈。例如:inta;①字符b;②intmain(){intb=10;③静态整数n=2;④charc[]={'a','b'};⑤char*p="我爱你";⑥int*p=(int*)malloc(sizeof(int));⑦}上面的程序①和②,因为是全局变量,所以很容易认为是在静态数据区。③处的数据是局部的,所以在栈区,④,因为是用static修饰符修饰的,static局部变量在静态数据区,⑤更不用说,也在栈区,局部字符数组也是一个局部变量。⑥有区别,指针变量p无疑是在栈区,而后面的iloveyou是一个常量字符串,却是在静态数据区。指针变量p指向字符串常量。⑦不多说,在堆区。以上是对C程序在内存中组织方式的简单介绍。
