【问题标题】:Find out in which part of the memory a value is being stored? [closed]找出值存储在内存的哪一部分? [关闭]
【发布时间】:2016-05-08 06:05:56
【问题描述】:

有没有办法使用 Visual Studio 2015 检查值在 C 内存(堆、堆栈、文本等)中的存储位置?

例如在这段代码中:

char *day(int n) {
static char *name[] = {
"error", "monday", "tuesday", "wednesday",
"thursday", "friday","saturday", "sunday"
};

找出数组名称、名称[0]、静态名称等的存储位置

【问题讨论】:

  • Visual Basic 与这些有什么关系?您是否尝试在 VB 中编写 C 解析器?
  • 一般来说,一个程序不能访问/修改另一个程序的内存,因为这会带来安全问题。您可以让 c 程序检索位置并将其发送到 Visual Basic 程序。此外,如果您在调试器中运行程序,则可以在运行时修改其内存。
  • @PaulGriffiths 我的错误,我想在 Visual Studio 中说。不,我没有。我仍然是 C 初学者,我还在学习基本的东西。我只是好奇,也许有办法找出答案。
  • @daganzrilic:找出答案的方法就是熟悉 C。static 变量将在程序的整个生命周期中存在,因此它们将存在于与数据等效的 Windows 中部分是。

标签: c memory text heap-memory stack-memory


【解决方案1】:

你不需要检查它;你知道的:

  • 自动变量在栈上;

  • 非零初始化(全局)变量位于 DATA 段中;

  • 零初始化(或未初始化)的全局变量在 BSS 中,扩展了 DATA 段;

  • 动态分配的内存位于 HEAP 段中。

  • 常量字符串可能位于 DATA 段或单独的(写保护)TEXT 段中,但这取决于编译器。

在您的示例中,name 将位于 DATA 段中,而常量字符串位于 TEXT 段中。

【讨论】:

  • 非常感谢您的回答。
猜你喜欢
  • 2013-06-21
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 2015-01-02
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
相关资源
最近更新 更多