4
|
Konstantin Burlachenko · 技术社区 · 10 年前 |
![]() |
1
4
您通常开始测试启用了运行时检查的编译代码。 /RTC on MSVC++ ,默认情况下在Debug配置中启用,它在函数序言中注入对_chkstk()的调用。GCC/g++具有 something very similar . 它探测函数序言中分配的页面,每隔4096字节读取一次。这可以确保您在出错时始终点击保护页面,从而触发此站点的名称并帮助您修复错误。 如果没有该检查,从技术上讲,您可以寻址根本不属于堆栈的页面。虽然它很可能触发处理器的#GP陷阱,但这并不能保证,因为页面可能已被另一个无关的分配映射。你一定很不幸,这已经完成了。基本的UB,诊断起来绝对可怕,因为你从未怀疑过堆栈,/RTC非常有价值。 |
![]() |
John Smith · 在ASM中实现递归,无需过程 8 年前 |
![]() |
Sweeper · 为什么这个调用堆栈如此奇怪? 9 年前 |
![]() |
Gerald Chu · AIX:_snw中的malloc(无符号长)? 11 年前 |
![]() |
user3374131 · NodeJS POST保持挂起状态 11 年前 |
![]() |
Jacob Krieg · 直接访问函数堆栈 11 年前 |
![]() |
Milad Khajavi · 如何创建会引发堆栈溢出异常的无限递归? 12 年前 |
![]() |
Jonas Byström · 删除Eclipse/JUnit调用堆栈截断 12 年前 |