据我所知,汇编程序分为两个 - 1)代码 2)数据。
现在,当我们编码时,比如在 c\c++ 上,代码被加载到内存中,然后 CPU 开始执行代码,一条一条指令,作为汇编程序。
我的问题是:
1.c代码存放在哪里?我的意思是,当我在 Visual Studio 中运行程序时,代码是否加载到其中之一 - 堆、堆栈 ..?
2.所以内存实际上被划分为堆栈,堆和日期段,但是当CPU执行程序时,作为汇编程序,它们都是1个具有相同数据区的汇编程序还是形成为,比方说2或从一个跳转到另一个的 3 个组装程序?
**让我补充这个问题,也许它会澄清我的意图:
当我启动一个 C 程序时,代码(机器指令)被加载到内存中。所以,这是一个汇编程序。但是内存划分是如何发生的呢?我的意思是,堆栈、数据段等不同的内存部分如何修改汇编程序?
最佳答案
来自维基百科:
The PC architecture supports a few basic read-write memory regions in a program namely: Stack, Data and Code. The heap is another region of address space available to a program, from which memory can be dynamically allocated or freed by the operating system in response to system calls such as malloc and free.
我建议您阅读 full article
SO上也有这个问题:
How are the different segments like heap, stack, text related to the physical memory?
此外,这些文章可能值得一读。尤其是最后一句:
回答您的问题:
1.c代码存放在哪里?
在代码段中。
2.所以内存实际上被划分为Stack、Heap和Date段,
在实模式下,是的。在保护模式下......取决于。极度简化:程序内存映射到物理内存。每个程序都位于自己的地址空间中。
如果你想了解更多,我推荐这些文章:
3.但是当CPU执行程序时,作为汇编程序,它们是否都是具有相同数据区的1个汇编程序,或者它们形成为,例如2或3个从一个跳转到另一个的汇编程序?
不,没有跳跃。处理器寄存器指向要执行的下一条指令。其他人指向堆栈等。
关于assembly - 堆、堆栈和数据段是否在同一个汇编程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15793069/