程序员学习笔记---程序内存机制的理解

来源:互联网 发布:淘宝客推广的有权重吗 编辑:程序博客网 时间:2024/04/29 07:02

Pre:我们在开发程序时,弄清本质往往会很重要,程序的底层究竟是如何运作的。虽然学习过了汇编和编译原理,但是真正的能将各学科的知识融会贯通的又有多少呢?那似乎是仅仅停留在理论水平上。

其实程序,往底层汇编讲,就是内存,变量,寄存器,寻址,控制,运算什么的。有一个对这个机制宏观的理解,对开发来说,很重要。


高级语言无论是C,C++,还是java,一般将程序的逻辑内存分为代码区,常量区(池),静态/全局区,栈区,堆区。

代码区用于存放读写的代码,我们知道编译过程,经过词法分析,得到一个个单词符号,然后语法分析识别出语法单位,然后语义分析中间代码生成生成中间代码,之后是代码优化和目标代码生成,一般就成了汇编语言。

定义一个字符常量,会放在常量区内,定义全局或静态变量,会放在静态区,局部变量会放在栈中,程序员自己申请释放的放入堆中。在java中,只要是用new的,都是在堆中开辟。数组也是在堆中。在c中,malloc开辟的是在堆中。在c++中new在堆中开辟。

栈的形式是优先占用高地址,与变量的字节高对高,低对低的存放。函数的调用也是一个压栈的过程。其实变量名就是对应的内存地址 ,每一个标识符都有指向的内存区。一般的变量对应了一段内存地址。变量分为值变量和引用变量。这点o-c做的很好。o-c所有的引用变量都是指针类型的。数组一般是在栈中连续存放的,但是在java中。数组是引用类型,是在堆中的。代码的优化,性能的优化,说到底还是内存的优化。如何让内存利用的更有效率,如何更高效的执行。


0 0