【问题标题】:Visual C++ /HEAP Linker-OptionVisual C++ /HEAP 链接器选项
【发布时间】:2011-07-02 20:22:43
【问题描述】:

我目前在我的一个程序中遇到了堆问题。当我通过互联网搜索解决方案时,我发现了 MSDN 中的一个页面,该页面描述了一些我不理解的堆分配链接器选项。

The documentation says that you can set the Heapsize with /HEAP.

我一直都知道堆栈大小是固定的,这对我来说很有意义。但我一直认为堆的大小是可变的。为了增加一些混乱,我发现默认值为 1MB。我编写了许多使用超过 1 MB 内存的程序。

那么 /HEAP 选项究竟做了什么?

谢谢

【问题讨论】:

  • 在我们深入研究深层内部结构并质疑智能编译器的合理默认值之前,您介意告诉我们什么是“麻烦”吗?
  • 这是关于我的堆问题的问题:goo.gl/KYMRj 但是我想了解它是如何工作的,这样我将来可能会避免类似的问题。
  • 不可能知道它是从哪里来的,因为你只是在使用一个可以完成各种恶作剧的外部函数调用。如果可以的话,发布一个完整的、最小的、独立的示例,这样我们就可以专注于可以管理的事情。

标签: visual-c++ linker heap-memory


【解决方案1】:

windows 为 .exe(进程)提供内存,方法是为它们提供对内存页面的读/写访问权限。对于 C++ 程序员来说,它应该留给操作系统,永远不要搞砸

/HEAP 1,000,000 表示 .exe 以 1,000,000 字节的页面启动...开始。更改此值不应影响任何内容。 Windows 自动在内存中分页。这只是提示 Windows 为该进程提供性能所需的内存。

【讨论】:

    【解决方案2】:

    我认为你混淆了由 PE 头控制的 OS 堆(HeapAlloc 函数),而你的 C++ 运行时库动态分配(mallocnew)可能使用VirtualAlloc 直接从操作系统中获取内存,并且不要使用操作系统堆。

    有关操作系统堆参数的更多信息,请阅读 CreateHeap 的 MSDN 文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-04
      • 2018-03-22
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多