如何检查变量是否有资源

How to check if there are resources for a variable?

本文关键字:变量 是否 资源 检查 何检查      更新时间:2023-10-16

C++程序中是否有任何方法可以检查变量的声明是否没有适当的资源?有时这样的检查很重要。

示例:

int i = 0;正常工作,但如果系统没有资源(RAM/等),它将失败/segfault/等。

int *i;在这种情况下也会失败,所以我不认为new是一个解决方案。

当变量进入作用域或初始化时执行此"检查"(这"有点"困难,因为编译器会将变量优化到寄存器中,重用内存等。)当内存错误发生时,处理它们是标准的方法。由于操作系统处理堆栈增长,并且内存可用于应用程序,因此需要"原子"操作。假设场景-

a)你的应用程序检查堆栈上是否有足够的空间,操作系统告诉你继续,我还有几页真实内存
b)上下文切换发生,其他应用程序夺走了所有宝贵的内存
c)您的应用程序试图占用应用程序已经掌握的空间b)

  • 堆栈变量将产生堆栈溢出错误
    但是,堆栈溢出错误不会被标准化。在windows上,你可以发现__try__except块的堆栈溢出

  • 用new分配的堆变量将产生bad_alloc(或调用new处理程序)异常
    如果您想处理这些情况,只需捕获抛出的异常。。。

  • 用C函数分配的堆变量将返回null
    因此请检查它们的返回值