加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 10:12:41 所属栏目:大数据 来源:网络整理
导读:我有一个带有多个工作线程的应用程序,每个核心一个.在现代的8核机器上,我有8个这样的线程.我的应用程序加载了很多插件,这些插件也有自己的工作线程.因为应用程序使用大量内存(照片,例如200 MB),我有内存碎片问题.问题是每个线程都分配了{$MAXSTACKSIZE …}的
我有一个带有多个工作线程的应用程序,每个核心一个.在现代的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;

我没有的另一个想法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读