|
4
|
| Konstantin Burlachenko · 技术社区 · 12 年前 |
|
1
4
您通常开始测试启用了运行时检查的编译代码。 /RTC on MSVC++ ,默认情况下在Debug配置中启用,它在函数序言中注入对_chkstk()的调用。GCC/g++具有 something very similar . 它探测函数序言中分配的页面,每隔4096字节读取一次。这可以确保您在出错时始终点击保护页面,从而触发此站点的名称并帮助您修复错误。 如果没有该检查,从技术上讲,您可以寻址根本不属于堆栈的页面。虽然它很可能触发处理器的#GP陷阱,但这并不能保证,因为页面可能已被另一个无关的分配映射。你一定很不幸,这已经完成了。基本的UB,诊断起来绝对可怕,因为你从未怀疑过堆栈,/RTC非常有价值。 |