1

假设我有一个包含 5 个项目 A、B、C、D 和 E 的 C++ Visual Studio 解决方案。这些项目已将 /STACK 链接器选项设置为:

  • A = 4MB
  • B = 空(默认为 1MB)
  • C = 空(默认为 1MB)
  • D = 16MB
  • E = 25MB

所有这些都构建为具有公开功能的独立 DLL。项目:

  • A 包含一个函数 foo_a,它调用 foo_b(来自 B)和 foo_c(来自 C)
  • B 包含函数 foo_b,它调用 foo_d(来自 D)和 foo_e(来自 E)

如果我调用函数 A.foo_a ,堆栈大小是多少?如果我直接调用 E.foo_e 会一样吗?

4

1 回答 1

1

手动启动的线程(使用 CreateThread)可以从函数调用的参数中获取自定义大小,主线程的堆栈大小根据来自 EXE 的信息设置。

您的五个 DLL 根本不重要。
它们可以通过链接器在其文件头中设置自定义大小,
但操作系统不会对此进行任何处理。

(运行时堆栈大小(在 Windows 上)是每个线程,而不是每个文件。)

于 2014-06-11T22:05:09.720 回答