2012-07-16 70 views
13

我正在做(可能是錯誤的)假設,它是實現和/或系統相關的。有沒有像INT_MAX或CHAR_BIT那樣能告訴我內存中指針的大小?C++指針使用多少內存?

+1

你應該小心成員函數指針的,因爲它們可以具有不同的尺寸,不同於常規的。見http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible更多血淋淋的細節。 – 2012-07-19 13:05:25

回答

28

指針指向內存中的某個位置,所以它將在32位系統上爲32位,在64位系統中爲64位。

指針大小也無關,它指向的類型,並且可以通過sizeof(anyType*)

UPD

我回答了這個被有人問的方式提出的方式(來衡量這提出了一個簡單的答案)。是的,我確實同意,在指向虛擬方法表的指針的情況下,指針的大小會有所不同,根據this article,它會在不同平臺上甚至在同一平臺上的不同編譯器上有所不同。以我的情況爲例,(x64 ubuntu,GCC 4.6.3)等於16字節。

+0

當然 - 多麼簡單,但如此真實。 – 2012-07-16 09:52:47

+2

錯了。在64位操作系統上,您仍然可以將程序編譯爲32位模式。 – 2012-07-16 10:02:38

+0

我找到了'sizeof(int *)',答案是'4'。這是否意味着4個字節? (有點有趣,因爲這是一個64位機器)。我正在用Visual C++編譯。 – HorseloverFat 2012-07-16 10:06:10

5

請問sizeof(int*)工作嗎?或者你想要檢查什麼?

1

指針的大小取決於您的操作系統(實際上是操作系統的位數),請嘗試sizeof(type *)函數。

+1

錯了。在64位操作系統上,您仍然可以將程序編譯爲32位模式。 – 2012-07-16 10:02:48

+0

@ icando..so指針的大小取決於你正在編譯的模式?舉例 – Tejendra 2012-07-16 10:05:00

+0

@Tejendra - 例如,Visual Studio有2種模式 - Win32 - 用於32位,一種用於x64(忘記它的名字) – 2012-07-16 10:07:54

2

這絕對取決於系統。通常一個簡單的數據指針可以存儲在size_t變量中。在C++ 11中有SIZE_MAX宏,它是size_t的最大值。在C++ 11中,你也可以使用std::intptr_t

如果考慮成員函數指針,事情會變得更加複雜。它依賴於其他的事情,如果這個類繼承自一個或多個父母,它是否暴露了虛函數,當然還有實現。

Here你可以找到關於成員函數指針的詳細文章,以及少數編譯器的一些例子。

2

簡單案例如int*的答案很簡單,並在其他答案中給出。

但請記住,使用多重繼承的對象的指針成員可能包含多個(WORDs/DWORDs/QWORDs),最糟糕的情況下可能包含多個(五)。

這個好文章:http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible

+0

多重繼承究竟如何影響指針的大小? – EJP 2012-07-16 11:07:09

+0

它沒有。正如所寫,答案完全錯誤。我懷疑海報正在考慮指向成員的指針,其大小可能與其他指針明顯不同。 (當然,並不要求所有的指針都具有相同的大小,即使在C語言中,我也曾經在sizeof(int *)!= sizeof(char *))的機器上工作,或者指向函數的指針有不同的大小比指向數據的指針大。) – 2012-07-16 11:30:48

+0

我目前無法撰寫更詳細的消息。幾個小時後,我會更新我的帖子。 – 2012-07-16 12:21:23

-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(); 
} 
+0

使用這個程序,它顯示「2」作爲所有printf語句的輸出。 所以,如果我沒有錯,那麼一個指針需要2個字節.... – 2015-11-15 15:06:30

+0

...只在特定的和可能很舊的計算機上使用。雖然在大多數現代計算機上,它的大小沒有規定,但肯定會與2不同。 – 2016-04-11 22:30:45