gpt4 book ai didi

memory - 为什么程序运行时环境变量的内存地址不一样

转载 作者:行者123 更新时间:2023-12-02 05:47:28 25 4
gpt4 key购买 nike

我编写了一个 C 程序,获取环境变量的名称并打印出它的内存地址,只需使用 getenv() 函数即可完成这项工作。假设我想要 PATH --> ./test PATH 的地址位置。但是当我在 gdb 中调试该程序时,该变量的内存位置不同。你能详细解释一下为什么会有这样的不同吗?

更准确地说:

./测试路径 --> 0xbffffd96

在 gdb 中调试 --> 0xbffffd53

[编辑]感谢您的解释。我真正关心的是,变量(在本例中为环境变量)的内存地址如何随着不同的程序而变化。例如我有2个程序a.out和b.out

./a.out --> PATH 的地址是某个数字

./b.out --> 另一个数字

那么,是什么导致了两个数字之间的差异呢?我希望我已经清楚地表达了我想问的问题。谢谢 friend 们。

最佳答案

通常,环境变量是某些“进程数据 block ”的一部分,并且它们是从启动进程继承的。如果您在调试器中运行程序,则该调试器将拥有自己的进程数据 block ,并且您的程序将从调试器继承其进程数据 block 。这反过来可能继承了 IDE 的程序数据 block 。

无论如何,这并不重要,因为环境变量的接口(interface)不会为您提供此类详细信息。例如,在 Windows 上,当您请求环境变量时,环境变量很可能会从 Unicode 转换为本地 8 位代码页。您永远不会看到原始变量,而只能看到其值(的近似值)。

关于memory - 为什么程序运行时环境变量的内存地址不一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1102712/

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