cpp中此指针的大小

时间:2014-12-10 11:49:19

标签: c++ gcc sizeof

我发现这个答案的输出与使用的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”指针背后的概念吗?

2 个答案:

答案 0 :(得分:1)

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

  

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

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

GCC -m32输出4484没有。

答案 1 :(得分:0)

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

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

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

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