这是我不知道第几次学习C++了,这次我打算从汇编语言开始学习来理解C++的内存机理。
汇编语言中,内存分为RAM和ROM,ROM中主要是存储接口BIO程序,而RAM分为显存RAM和主存RAM。在执行一个汇编程序时,代码段是通过寄存器CS与IP来分配的;数据段是通过寄存器DS来分配;栈是通过寄存器SS和SP来分配的。
在C++中,内存分为堆,栈,代码段,数据段和BSS段。由汇编语言类推,在C++中各段的内存分配也是由一系列的寄存器来分配的。那么这些寄存器中数据的设定是随机的吗?很显然并不是,如果是随机的话会容易造成内存地址的冲突,我猜测是在程序运行中,每个寄存器存储的内存段是由小到大依次增加的,在前面的内存段被占满的情况下,寄存器指向下一段然后循环。
因此虽然每次运行程序中分配的地址看起来是随机的,但只要了解当时计算机的内存状态,就可以确定内存分配的地址。
一家之言,希望大家指正错误。
网友评论