Closed demiaowu closed 6 years ago
1.理论上切换速度是不受影响的,但是更大的栈在内存管理上耗时会很多 2.栈空间的使用,基本上不会遇到跳跃式的访问;当然,特殊的场景下是有可能检测不到的
函数的在栈空间申请的时候,会首先给开的局部数组空间做预留,然后才是将入参传进来,这样一旦局部数据空间溢出了,那么入参一进来,就被推到了溢出空间,这样 protect page 就检查不到了,这是目前遇到的场景。
但是对这种情况感觉无能为力,在 C++ 也没办法去对任何一个地址空间访问的时候做栈空间溢出检查,处理开辟较大 stack 空间,并且在代码编写和 review 这一层保证尽可能避免大的局部空间申请,不知道还有没有什么方法能够去避免这种溢出的情况 ?
"避免过大的局部空间申请"可与说是C系的编码常识了,毕竟linux默认的线程栈也不过8MB,不能任意挥霍。 stackoverflow是程序员一直要关注的点,C/C++没什么办法可以让程序员无视这个点。 能做的仅仅是尽量保护一下
确实是如此,谢谢解答~