delphi – 什么是安全的最大堆栈大小或如何衡量堆栈的使用?

前端之家收集整理的这篇文章主要介绍了delphi – 什么是安全的最大堆栈大小或如何衡量堆栈的使用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有多个工作线程的应用程序,每个核心一个.在现代的8核机器上,我有8个这样的线程.我的应用程序加载了很多插件,这些插件也有自己的工作线程.因为应用程序使用大量内存(照片,例如200 MB),我有内存碎片问题.问题是每个线程都分配了{$MAXSTACKSIZE …}的地址空间.它不是使用物理内存而是使用地址空间.
我将MAXSTACKSIZE从1MB降低到128KB并且似乎可以工作,但如果我接近极限,我现在不行.有没有可能测量真正使用多少堆栈?

解决方法

使用它来计算为当前线程的堆栈提交的内存量:
function CommittedStackSize: Cardinal;
asm
  mov eax,[fs:$4] // base of the stack,from the Thread Environment Block (TEB)
  mov edx,[fs:$8] // address of lowest committed stack page
                  // this gets lower as you use more stack
  sub eax,edx
end;

我没有的另一个想法.

原文链接:https://www.f2er.com/delphi/103192.html

猜你在找的Delphi相关文章