据说架构没有一个大家都统一认定的定义,于是我找了一个能被绝大多数人接受的。这个定义很长,我没心情把它都写出来。但是有一个地方引起了我的注意:“xxxxxxxx运行时的联系xxxxxxxxxxx。”这样一个高深的概念居然会跟这么具体的一个实现产生这么密切的关联,你难道不觉得惊奇吗?
虽然我张嘴计算的世界,闭口计算的世界,但是归根结底这些都离不开内存的世界,也就是程序运行时他们在内存中的状态。
也许不是我们这代程序员,就不会有这个意识,就不能理解这样理解问题的好处在什么地方。我有那么那么多的例子可以证明,通过这个角度理解问题会让你有一种豁然开朗的感觉。比如变量只被赋值一次,比如内存泄漏如何产生,比如为什么大家都习惯用EBX里传递参数,等等等等。但是我确实不是你,我不可能知道你面对一个问题首先会从何处入手思考问题。
在我们这代人,习惯操作内存和寄存器,习惯调用中断,习惯使用偏移访问数据。我们确实不喜欢指针,不习惯api,不乐意用pop。但是如果这个是代价,我宁愿你们像我们一样这样笨拙的写程序,只要你们能建立起程序在内存中形态的概念。
其实问题本身并不需要多么复杂的技术,我们仅仅需要知道数据是存放在数据区里面的,程序命令是存放在代码区的,堆栈是在堆栈区的。调用的api是在程序结尾的,调入内存的时候是会也调用这些尾巴上的数据的。而所谓的程序,实际上是程序跟操作系统的一些列的交互并且不断的转移控制权。而所谓的api调用,实际上就是操作系统把控制权拿过来交给api提供者,然后在拿回去交给程序这么一个过程。而我们的工作,其实就是学会如何分配好数据区和堆栈,从而是他们能够得到最有效率的使用,而不会被种种莫名其妙的操作打成细小的碎片。
这一切本没有多少复杂的成分,但是我却不知道为什么年轻人就那么难建立起这样的一种思维的模型,能够时刻体会到程序在内存的形态。
其实各种数据,只要是数据,只要是变量,就会出现在数据区或者堆栈区。而常量不管你如何设定,只要在合理的范围内,就不会存在于内存的数据区和堆栈区,而只会出现在命令区。当然你也确实可以讲常量进行变量化,并且在数据区保留一个备份,但是我实在看不出这样作的好处。
虽然我张嘴计算的世界,闭口计算的世界,但是归根结底这些都离不开内存的世界,也就是程序运行时他们在内存中的状态。
也许不是我们这代程序员,就不会有这个意识,就不能理解这样理解问题的好处在什么地方。我有那么那么多的例子可以证明,通过这个角度理解问题会让你有一种豁然开朗的感觉。比如变量只被赋值一次,比如内存泄漏如何产生,比如为什么大家都习惯用EBX里传递参数,等等等等。但是我确实不是你,我不可能知道你面对一个问题首先会从何处入手思考问题。
在我们这代人,习惯操作内存和寄存器,习惯调用中断,习惯使用偏移访问数据。我们确实不喜欢指针,不习惯api,不乐意用pop。但是如果这个是代价,我宁愿你们像我们一样这样笨拙的写程序,只要你们能建立起程序在内存中形态的概念。
其实问题本身并不需要多么复杂的技术,我们仅仅需要知道数据是存放在数据区里面的,程序命令是存放在代码区的,堆栈是在堆栈区的。调用的api是在程序结尾的,调入内存的时候是会也调用这些尾巴上的数据的。而所谓的程序,实际上是程序跟操作系统的一些列的交互并且不断的转移控制权。而所谓的api调用,实际上就是操作系统把控制权拿过来交给api提供者,然后在拿回去交给程序这么一个过程。而我们的工作,其实就是学会如何分配好数据区和堆栈,从而是他们能够得到最有效率的使用,而不会被种种莫名其妙的操作打成细小的碎片。
这一切本没有多少复杂的成分,但是我却不知道为什么年轻人就那么难建立起这样的一种思维的模型,能够时刻体会到程序在内存的形态。
其实各种数据,只要是数据,只要是变量,就会出现在数据区或者堆栈区。而常量不管你如何设定,只要在合理的范围内,就不会存在于内存的数据区和堆栈区,而只会出现在命令区。当然你也确实可以讲常量进行变量化,并且在数据区保留一个备份,但是我实在看不出这样作的好处。