[英]How much memory does a C++ pointer use?
我正在做(可能是错误的)假设它是依赖于实现和/或系统的。 是否有类似INT_MAX或CHAR_BIT的东西会告诉我内存中指针的大小?
指针指向内存中的一个位置,因此在32位系统上为32位,在64位系统中为64位。
指针大小也与它指向的类型无关,可以通过sizeof(anyType*)
来度量
UPD
我回答这个问题的方式是问问题的方式(建议一个简单的答案)。 是的,我同意在像虚拟方法表指针的情况下,指针的大小会有所不同,根据这篇文章 ,它会在不同的平台上,甚至在同一平台内的不同编译器上有所不同。 在我的例子中,例如(x64 ubuntu,GCC 4.6.3)它等于16个字节。
sizeof(int*)
有效吗? 或者无论你想要检查什么?
它绝对是系统依赖的。 通常,简单的数据指针可以存储在size_t变量中。 在C ++ 11中,有SIZE_MAX宏,它是size_t的最大值。 在C ++ 11中,您还可以使用std :: intptr_t 。
如果考虑成员函数指针,事情会变得更加复杂。 如果类继承自一个或多个父项,如果它公开虚函数,当然还有实现,则它取决于其他事项。
在这里,您可以找到有关成员函数指针的详细文章,以及一些编译器的示例。
像int*
这样的简单案例的答案是直截了当的,并在其他答案中给出。
但请记住,使用多重继承的对象的指针成员可能包含多个(WORD / DWORD / QWORD),在最坏的情况下最多可包含5个(五个)。
关于这个的好文章: http : //www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible
指针大小取决于您的操作系统(实际上是操作系统的位数),请尝试sizeof(类型*)函数。
#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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.