我知道有Stack,Heap,Code和Data等部分.堆栈/堆是否使用相同的内存部分,因为它们可以独立生长?这段代码是什么?当我有一个函数是它的一部分堆栈或代码部分?这个初始化/未初始化的数据段是什么?
是否有只读存储器部分?当我有一个const变量时,实际发生的是编译器将内存部分标记为只读或将其放入只读内存部分.
静态数据保存在哪里?全球数据保存在哪里?
任何好的参考/文章相同?
我认为内存部分和布局是独立于操作系统的,它与编译器有很大关系.堆栈,堆,代码,数据[初始化,未初始化]段是否出现在所有操作系统中?当存在静态数据时,编译器发生的事情是静态的,接下来会发生什么呢?是编译器管理程序,它应该知道该做什么?所有编译器都不应该遵循通用标准吗?
关于C++内存布局实际上是确定无疑的.但是,大多数现代操作系统使用的是类似的系统,并且这些段根据权限分开.
代码具有执行权限.其他部分没有.在Windows应用程序中,您不能只将一些本机代码放在堆栈上并执行.Linux提供与x86架构相同的功能.
数据是结果(.exe等)的一部分但无法写入的数据.这部分基本上是文字的去处.仅限本节中的读取权限.
这两个段是结果文件的一部分.堆栈和堆是运行时分配的,而不是映射掉硬盘驱动器.
堆栈基本上是一个,大(1MB左右,许多编译器为它提供设置)堆分配.编译器会为您管理它.
堆内存是操作系统通过某个进程返回给您的内存.通常,堆是指向空闲内存块及其大小的指针的堆(数据结构).当您提出要求时,它会发给您.这里有读写权限,但没有执行权限.
有只读存储器(ROM).但是,这只是数据部分.您无法在运行时更改它.当你创建一个const变量时,它在内存中没有任何特殊的变化.所有发生的事情是编译器只会在其上创建某些指令.而已.x86在编译器中没有const-it的全部知识或概念.
AFAIK:
堆栈/堆它们是否使用相同的内存部分,因为它们可以独立增长?
他们可以独立成长。
这段代码是什么?
存储代码和常量数据的只读段。
当我有一个函数时,它是堆栈的一部分还是代码部分?
函数的定义(代码)将在 CS 中。每次调用的参数都在堆栈上传递。
另外这个初始化/未初始化的数据段是什么?
数据段是存储全局/静态变量的地方。
是否有可用的只读内存部分?
代码段。我想某些操作系统可能会提供用于创建自定义只读段的原语。
当我有一个 const 变量时,实际发生的情况是编译器将内存部分标记为只读或将其放入只读内存部分。
它进入CS。
静态数据保存在哪里?全局数据保存在哪里?
数据段。