用 C 语言编写时,启动程序时如何知道内存中有多少可用堆栈空间?堆空间怎么样?
如何知道程序执行期间使用了多少内存?
最佳答案
这都是 Win32 特定的(不是真正 C 特定的,只是操作系统 API):
创建线程时,默认情况下它会获得 1MB 堆栈空间,可以在您使用的任何 CreateThread API 中进行修改。
您可以查看线程信息 block 以查找实际的堆栈信息,但即使有文档记录,该技术并未得到正式支持,请参阅 http://en.wikipedia.org/wiki/Win32_Thread_Information_Block .
此外,对于 32 位应用程序,您最多只能寻址 2GB,因此对于设计上使用大量内存的应用程序,需要注意的是进程虚拟地址空间的总大小(已提交+保留),其中包括所有堆分配。您可以使用 GlobalMemoryStatusEx API 以编程方式访问进程的虚拟内存,请查看 ullTotalVirtual虚拟地址空间的参数。一旦您的进程接近 1.8 或 1.9GB 的 VAS,堆分配和 VirtualAlloc 调用就会开始失败。对于“普通”应用程序,您不必担心 VAS 耗尽,但检查失败分配总是好的。另外,你不应该出现堆栈溢出,除非你有错误,或者设计不好。
关于c - 现代计算机的堆栈和堆空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3793660/