此指针的大小(以 cpp 为单位)

Sizeof this pointer in cpp

本文关键字:cpp 为单位 指针      更新时间:2023-10-16

我发现这个答案的输出与使用的gcc编译器版本不同。

#include<iostream>
using namespace std;
class ABC{
  int x;
public:
  void show(){
    cout<<sizeof (this);
    cout<<sizeof (*this);
  }
};
int main(){
  ABC ob;
  ob.show();
  return 0;
}

此代码在 4.9.1 版本中给出 84 的输出,在以前的版本中给出 44 的输出。

谁能清楚地解释我"这个"指针背后的概念是什么?

this指针在 N3337 [class.this] 中定义:

1 在非静态 (9.3) 成员函数的主体中,关键字 this 是一个 prvalue 表达式,其值是 为其调用函数的对象。this的类型 类X的成员函数X*

所以sizeof(this)没有什么特别的.正如 deviantfan 所指出的,您很可能正在观察编译 32 位程序与 64 位程序的效果。

具有-m32输出的 GCC 4484没有。

类是在堆内存中没有分配任何空间的模板。在 main() 函数中创建变量 ob 后,内存将根据类的定义分配给堆内存中的变量 ob。内存位置还有一个标头空间,其中包含变量的元数据。"this"包含已分配内存的地址。

现在,不同版本的编译器以不同的方式处理此内存分配。

查看类定义中的函数。这些在 ABC 类型的变量的所有实例中都是相同的。因此,一个版本可以为函数分配一个共享空间,而另一个版本可以为占用更多空间的每个实例分配函数空间。

这可能是差异背后的原因之一。