繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM