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

Windows是否会回收堆栈空间?

发布时间:2020-12-14 02:07:37 所属栏目:Windows 来源:网络整理
导读:我正在做一种叫做“叠画”的技巧.确定特定函数使用多少堆栈空间. 如果我在堆栈上分配了1MB的物品.然后我确定我没有使用任何这些项目. Windows会自动解除(免费)那些未使用的页面吗? 我特别想知道Windows的VMM.关于页面是否已经提交或者不一定是已经提交但只
我正在做一种叫做“叠画”的技巧.确定特定函数使用多少堆栈空间.

如果我在堆栈上分配了1MB的物品.然后我确定我没有使用任何这些项目. Windows会自动解除(免费)那些未使用的页面吗?

我特别想知道Windows的VMM.关于页面是否已经提交或者不一定是已经提交但只是保留?

换句话说,如果我手动访问内存到1MB,那么windows可能会引发访问冲突吗?

解决方法

要回答您的第一个问题,Windows不会拒绝这些页面.在线程终止之前,任何作为堆栈提交的页面都会保持不变.

要回答第二个问题,相关字段位于IMAGE_OPTIONAL_HEADER32或IMAGE_OPTIONAL_HEADER64结构中.它们是SizeOfStackReserve和SizeOfStackCommit.这个结构是PE的NT头的一部分,它又从MSDOS头引用(在PE中以偏移0开始,“MZ”作为魔术值).

Microsoft的link.exe具有“/ STACK:reserve [,commit]”开关,它直接与这两个字段相关联.

自问题发生变化后进行编辑:您只能可靠地访问堆栈的已提交页面和当前防护页面.如果您访问不是保护页面的保留页面,您应该期望AV(如果您访问最后一个保护页面,您将获得SEH堆栈溢出异常).

(编辑:李大同)

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

    推荐文章
      热点阅读