C ++指针使用多少内存?

时间:2012-07-16 09:50:01

标签: c++ pointers

我正在做出(可能是错误的)假设,即它是依赖于实现和/或系统的。是否有类似INT_MAX或CHAR_BIT的东西会告诉我内存中指针的大小?

6 个答案:

答案 0 :(得分:29)

指针指向内存中的一个位置,因此在32位系统上为32位,在64位系统中为64位。

指针大小也与它指向的类型无关,可以通过sizeof(anyType*)

来衡量

<强> UPD

我回答这个问题的方式是问问题的方式(建议一个简单的答案)。是的,我确实同意,在指向虚方法表的情况下,指针的大小会有所不同,根据this article,它会在不同的平台上变化,甚至在同一平台的不同编译器上也会有所不同。在我的例子中,例如(x64 ubuntu,GCC 4.6.3)它等于16个字节。

答案 1 :(得分:5)

sizeof(int*)会有效吗?或者无论你想要检查什么?

答案 2 :(得分:2)

这绝对是系统依赖的。通常,简单的数据指针可以存储在size_t变量中。在C ++ 11中,有SIZE_MAX宏,它是size_t的最大值。在C ++ 11中,您还可以使用std::intptr_t

如果考虑成员函数指针,事情会变得更加复杂。如果类继承自一个或多个父项,如果它公开虚函数,当然还有实现,则它取决于其他事项。

Here你可以找到一篇关于成员函数指针的详细文章,以及一些编译器的例子。

答案 3 :(得分:2)

int*这样的简单案例的答案很简单,并在其他答案中给出。

但请记住,使用多重继承的对象的指针成员可能包含多个(WORD / DWORD / QWORD),在最坏的情况下最多可包含5个(五个)。

关于此的好文章:http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible

答案 4 :(得分:1)

指针大小取决于您的操作系统(实际上是操作系统的位数),请尝试sizeof(类型*)函数。

答案 5 :(得分:-1)

#include<stdio.h>
#include<conio.h>
void main()
{
    printf(" %d",sizeof(int *));
    printf(" %d",sizeof(char *));
    printf(" %d",sizeof(float *));
    printf(" %d",sizeof(double *));
    getch();
}