assembly - 堆、堆栈和数据段是否在同一个汇编程序中?

标签 assembly cpu heap-memory stack-memory

据我所知,汇编程序分为两个 - 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?

此外,这些文章可能值得一读。尤其是最后一句:
  • What is stack segment?
  • C51: CREATING A FIXED STACK SEGMENT
  • Stack Segment and Extra Segment in 8086

  • 回答您的问题:

    1.c代码存放在哪里?

    在代码段中。

    2.所以内存实际上被划分为Stack、Heap和Date段,

    在实模式下,是的。在保护模式下......取决于。极度简化:程序内存映射到物理内存。每个程序都位于自己的地址空间中。

    如果你想了解更多,我推荐这些文章:
  • Real Mode
  • Protected Mode
  • Difference between real mode and protected mode

  • 3.但是当CPU执行程序时,作为汇编程序,它们是否都是具有相同数据区的1个汇编程序,或者它们形成为,例如2或3个从一个跳转到另一个的汇编程序?

    不,没有跳跃。处理器寄存器指向要执行的下一条指令。其他人指向堆栈等。

    关于assembly - 堆、堆栈和数据段是否在同一个汇编程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15793069/

    相关文章:

    c - C 程序调用的 ARM 汇编代码出现段错误

    assembly - 在 RISC-V 上在大端和小端之间转换

    c++ - 使用 AMD FX 4100 四核在 linux ubuntu 12.10 上获取 CPU 温度

    java - for 循环在 Android 设备上非常慢

    ubuntu - 建筑琼斯福斯 - asm/unistd.h : No such file or directory

    performance - WebGL 的 CPU 使用率高?

    linux - 如何在 Linux 内核模块中获取一组可用的 CPU?

    android eclipse无法执行dex java堆空间错误

    jvm - 堆空间异常

    assembly - 如何为 PIC 汇编代码设置 emacs