b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

一般情况下是什么导致堆栈溢出?

电脑杂谈  发布时间:2020-08-12 11:15:27  来源:网络整理

内存堆栈溢出_ie8内存不够 堆栈溢出_什么是堆栈溢出

当n为9且应该正确运行时,没有什么可说的. 我相信每个人都对此表示反对. 当n等于99时,它可以正常运行. 我相信很都无法弄清楚. 我们申请的空间只有16个字节,为什么我们仍然可以访问第99个字节的空间(这就是所谓的堆溢出访问)?此时,堆实际上已经溢出,但是为什么结果没有错误?原因在于操作系统的内存分配策略. 例如,Linux中的内存由页面(页面,通常为每页4K字节)管理,并且操作系统以页面为单位向进程分配内存. 换句话说,尽管您只请求了16个字节,但实际分配给您的页面可能是一页(4K字节). 此页面上只有这16个字节是您自己的“合法属性”,并且您不应访问其他部分(访问后,堆将越过边界). 但是,由于操作系统对内存的访问权限管理是基于页面的,因此当您(非法)访问此页面上16个字节以外的内存时,系统不会报告错误,并且确实可以达到目的(在例如,n等于在99时读写仍然正确. )

内存堆栈溢出_ie8内存不够 堆栈溢出_什么是堆栈溢出

这是否意味着跨越边界是无害的,所以根本不用担心吗?显然不是. 因为交叉的最大危害不是对自己,而是对“他人”. 因为除了请求的16个字节,并提防堆访问超出范围.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-297347-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...