为什么不同的翻译单元没有独立和沙盒的内存空间?
Why different translation units do not have independent & sandboxed memory spaces?
我被代码中的段错误击中,我只是在做以下事情:
std::vector<int> A;
A.push_back(2);
在浪费了太多时间试图弄清楚我的代码中的问题是什么(甚至 valgrind 崩溃了(之后,我发现我正在使用的一个库(在其自己的翻译单元中(正在访问和编辑向量的元素超出其界限。
这些问题是否有任何缓解措施?或者我们只能祈祷我们使用的图书馆不会泄漏? 为什么允许不同的翻译单元共享内存空间?
为什么不同的翻译单元没有独立和沙盒的内存空间?
因为能够从一个 TU 访问另一个 TU 的数据结构非常有用。
或者我们只能祈祷我们使用的图书馆不会泄漏?
好吧,泄漏是一个问题。越界访问内存通常是一个更严重的问题。
你可以做的不仅仅是祈祷。您可以为库编写(单元、集成等(测试,并使用尝试检测未定义行为的工具执行这些测试。或者,您可以尝试通过手动分析源来验证库的正确性。
如果您无法事先测试一段代码,例如在第三方插件的情况下,则(大多数?(操作系统提供了一个有用的内存隔离工具:进程。一个进程不能直接访问另一个进程的内存,所以如果你在子进程中运行第三方代码,那么它就不会破坏父进程的内存,如果子进程尝试错误的内存访问,并作系统杀死,则不需要杀死父进程。
然而,不幸的是,C++标准库没有用于进程的API。
相关文章:
- 当注入程序的内存空间时,如何读取从 0 到 0xFFFFFFFFF 的每个字节?我正在创建模式扫描仪
- 为什么不同的翻译单元没有独立和沙盒的内存空间?
- 我的boost managed_shared_memory在离开作用域时似乎不会从内存空间中取消映射
- 是否可以在专用内存空间中分配一个为提升管理共享内存而创建的对象
- 为什么我只能在 4 GB 的虚拟内存空间上分配 2 GB?
- OPENCL-如何使辅助功能返回阵列并将内存的部分从恒定内存空间转移到私有
- 为多维数组创建内存空间
- 将节点添加到链接列表中,而无需明确分配内存空间(无需使用新)
- 内存空间的反转方向?
- 打开文件*以增加内存空间
- 为什么堆栈中的函数局部变量之间存在内存空间
- 只有当声明一个对象时,内存空间才会分配给类的数据成员,那么为什么 Sizeof(class_name) 给我结果
- 何时分配C++类的成员函数的内存空间
- 使用free()释放new分配的内存空间
- 共享内存空间可以将数据(非POD)发送到另一个共享内存吗?
- 删除内存空间后,指针的值保持不变还是更改?对象内容是否将被更改
- 如何在分配更多内存空间之前检查指针是否为 NULL
- 需要析构函数来释放内存空间,即使所有项目都已弹出
- 数组的指针,该数组的每个元素的内存空间信息存储在哪里
- C++内存空间