如何检查变量是否有资源
How to check if there are resources for a variable?
在C++
程序中是否有任何方法可以检查变量的声明是否没有适当的资源?有时这样的检查很重要。
示例:
int i = 0;
正常工作,但如果系统没有资源(RAM/等),它将失败/segfault/等。
int *i;
在这种情况下也会失败,所以我不认为new
是一个解决方案。
当变量进入作用域或初始化时执行此"检查"(这"有点"困难,因为编译器会将变量优化到寄存器中,重用内存等。)当内存错误发生时,处理它们是标准的方法。由于操作系统处理堆栈增长,并且内存可用于应用程序,因此需要"原子"操作。假设场景-
a)你的应用程序检查堆栈上是否有足够的空间,操作系统告诉你继续,我还有几页真实内存
b)上下文切换发生,其他应用程序夺走了所有宝贵的内存
c)您的应用程序试图占用应用程序已经掌握的空间b)
- 堆栈变量将产生堆栈溢出错误
但是,堆栈溢出错误不会被标准化。在windows上,你可以发现__try__except块的堆栈溢出 - 用new分配的堆变量将产生bad_alloc(或调用new处理程序)异常
如果您想处理这些情况,只需捕获抛出的异常。。。 - 用C函数分配的堆变量将返回null
因此请检查它们的返回值
相关文章:
- 如何检查变量是否是C++中的地图?
- 如何更好地检查两个 char 变量是否在一组值中?
- 模板变量是否允许在多个翻译单元中并有效合并?
- 如何检查模板类中的变量是否为字符串类型?
- 如何检查 int 变量是否包含合法(非陷阱表示)值?
- "new"创建的实例的所有成员变量是否都存在于堆上而不是堆栈上?
- C++11:16 字节原子<>变量是否在 16 字节边界上自动对齐,从而允许CMPXCHG16B指令?
- 程序如何知道静态变量是否需要初始化?
- 检查私有成员变量是否在一定范围内,如果没有调整
- C++ 如何检查 char 变量是否未定义(未初始化)
- 是否可以检查变量是否位于 L1/L2/L3 缓存中
- 初始化命名空间中的变量是否类似于将它们初始化为类成员?
- 如果输入类型与目标类型不同,"cin"变量是否重置为某个默认值?
- 变量是否会自动转换为函数所需的类型作为适当的参数
- const变量是否可以在具有默认值的参数中赋值(作为可选参数)
- 如何对私有变量是否已更改进行单元测试
- 将常量引用成员设置为临时变量是否安全
- 如何检查类中定义的枚举类型变量是否被分配给?
- 在链接的程序集文件中,我想从 c++ 调用代码访问变量.是否可以在不触发访问冲突的情况下执行此操作?
- "decltype(auto)"变量是否有任何实际用例?