gpt4 book ai didi

c++ - C++在内部声明变量时如何生成随机地址?为什么它不线性存储它们?

转载 作者:行者123 更新时间:2023-11-30 05:04:13 30 4
gpt4 key购买 nike

我非常渴望了解 C++ 或任何编程语言如何确定用于其变量和指令的内存地址。这些十六进制值是完全随机的还是计算出来的?我知道指令是连续存储在内存中的,并且有一个程序计数器在它上面递增以提供指令的地址。但是为什么变量是随机存储的,为什么不直接线性存储呢?

最佳答案

变量的位置由编译器相对于您的程序自行决定。

编译器不需要为变量分配内存。变量可以放在寄存器中。

如果编译器使用堆栈,操作系统可能会将指向堆栈内存的指针传递给可执行文件。尽管编译器可能会对变量的位置进行排序,但如果存在的话,它们的确切地址将由操作系统确定。在许多嵌入式系统中,变量可以放在段中,而段则由编译器放置在固定位置。

对于动态内存,大多数实现调用操作系统函数来分配内存。嵌入式系统可能不同,动态内存有固定的位置。

有许多属性会影响变量的位置:任务放置、内存可用性和虚拟内存,仅举几例。许多操作系统会分配内存给任务使用,所有变量和代码都驻留在这个区域。某些操作系统可能会将内存换出到另一个设备,例如硬盘驱动器(也称为分页或虚拟内存)。

操作系统通常会确定程序变量(和内存空间)的起始位置。实际位置有很多决定因素,例如正在运行的其他任务(使用内存)、系统内存容量、虚拟内存和可执行代码大小。编译器可能会在程序的内存区域内对变量进行排序。

关于c++ - C++在内部声明变量时如何生成随机地址?为什么它不线性存储它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49014506/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com