gpt4 book ai didi

c++ - 堆栈或堆上的对象分配

转载 作者:行者123 更新时间:2023-11-30 04:21:04 25 4
gpt4 key购买 nike

我正在尝试建立一种机制来判断类对象的分配位置。想在类中制作一个标志,但不可能设置一个值,因为在调用“new”运算符期间对象的生命周期没有开始。在 C++ 中是否可以判断一个对象是在堆栈上还是堆上(运行时)?

最佳答案

没有可移植的方法来执行此操作,但如果我们假设您要执行此操作的系统类型数量有限,您可以尝试以下方法:

获取 main 中(或其他“调用堆栈中的低层”)中的某个局部变量的地址。将其存储在全局变量中,让我们调用 char *stackbase;

然后获取您要 checkin 的函数中局部变量的地址,我们称它为char *stacktop;

现在,如果我们有一个 char *obj = reinterpret_cast<char *>(object_in_test); ,然后:

if (obj > stacktop && obj < stackbase) on_stack = true;
else on_stack = false;

请注意,这有几个缺陷:

  1. 这是技术上未定义的行为。它适用于大多数系统,因为整个内存空间是连续的。但是在有些系统中,堆栈和内存的其他部分具有单独的“地址空间”,这意味着指向不同类型内存的两个指针可以具有相同的地址。
  2. 线程需要有一个“每个线程堆栈库”。
  3. 假定堆栈“向零增长”(如果不是,则必须反转 if 中的 ><
  4. 全局变量将被视为not on stack .
  5. 使用风险自负!

尽管下面有免责声明,但我完全希望不得不删除这个答案,因为它会被语言律师否决。

关于c++ - 堆栈或堆上的对象分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14797662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com