我正在做(可能是錯誤的)假設,它是實現和/或系統相關的。有沒有像INT_MAX或CHAR_BIT那樣能告訴我內存中指針的大小?C++指針使用多少內存?
回答
指針指向內存中的某個位置,所以它將在32位系統上爲32位,在64位系統中爲64位。
指針大小也無關,它指向的類型,並且可以通過sizeof(anyType*)
UPD
我回答了這個被有人問的方式提出的方式(來衡量這提出了一個簡單的答案)。是的,我確實同意,在指向虛擬方法表的指針的情況下,指針的大小會有所不同,根據this article,它會在不同平臺上甚至在同一平臺上的不同編譯器上有所不同。以我的情況爲例,(x64 ubuntu,GCC 4.6.3)等於16字節。
當然 - 多麼簡單,但如此真實。 – 2012-07-16 09:52:47
錯了。在64位操作系統上,您仍然可以將程序編譯爲32位模式。 – 2012-07-16 10:02:38
我找到了'sizeof(int *)',答案是'4'。這是否意味着4個字節? (有點有趣,因爲這是一個64位機器)。我正在用Visual C++編譯。 – HorseloverFat 2012-07-16 10:06:10
請問sizeof(int*)
工作嗎?或者你想要檢查什麼?
指針的大小取決於您的操作系統(實際上是操作系統的位數),請嘗試sizeof(type *)函數。
錯了。在64位操作系統上,您仍然可以將程序編譯爲32位模式。 – 2012-07-16 10:02:48
@ icando..so指針的大小取決於你正在編譯的模式?舉例 – Tejendra 2012-07-16 10:05:00
@Tejendra - 例如,Visual Studio有2種模式 - Win32 - 用於32位,一種用於x64(忘記它的名字) – 2012-07-16 10:07:54
這絕對取決於系統。通常一個簡單的數據指針可以存儲在size_t變量中。在C++ 11中有SIZE_MAX宏,它是size_t的最大值。在C++ 11中,你也可以使用std::intptr_t。
如果考慮成員函數指針,事情會變得更加複雜。它依賴於其他的事情,如果這個類繼承自一個或多個父母,它是否暴露了虛函數,當然還有實現。
Here你可以找到關於成員函數指針的詳細文章,以及少數編譯器的一些例子。
簡單案例如int*
的答案很簡單,並在其他答案中給出。
但請記住,使用多重繼承的對象的指針成員可能包含多個(WORDs/DWORDs/QWORDs),最糟糕的情況下可能包含多個(五)。
這個好文章:http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible
多重繼承究竟如何影響指針的大小? – EJP 2012-07-16 11:07:09
它沒有。正如所寫,答案完全錯誤。我懷疑海報正在考慮指向成員的指針,其大小可能與其他指針明顯不同。 (當然,並不要求所有的指針都具有相同的大小,即使在C語言中,我也曾經在sizeof(int *)!= sizeof(char *))的機器上工作,或者指向函數的指針有不同的大小比指向數據的指針大。) – 2012-07-16 11:30:48
我目前無法撰寫更詳細的消息。幾個小時後,我會更新我的帖子。 – 2012-07-16 12:21:23
#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();
}
使用這個程序,它顯示「2」作爲所有printf語句的輸出。 所以,如果我沒有錯,那麼一個指針需要2個字節.... – 2015-11-15 15:06:30
...只在特定的和可能很舊的計算機上使用。雖然在大多數現代計算機上,它的大小沒有規定,但肯定會與2不同。 – 2016-04-11 22:30:45
- 1. C指針,可用內存
- 2. C++指針內存使用情況
- 3. C:正確的語法分配內存使用指針指針
- 4. C - 指針和內存
- 5. 內存用C關於指針運算
- 6. Hashtable使用多少內存?
- 7. as.data.table使用多少內存?
- 8. c指向指針內存分配的指針
- 9. 使用指針時內存使用量過多?
- 10. C/C++多指針?
- 11. iPhone:多少內存使用量太多?
- 12. 的malloc內存的指針的指針
- 13. 指針指針的內存泄漏
- 14. 指針釋放和堆內存,C++
- 15. C++內存泄漏浮點指針
- 16. 學習C - 指針和內存尋址
- 17. 指針內存泄漏的C++數組
- 18. c指針和內存 - 瞭解
- 19. C++中的指針內存分配
- 20. 指針和C內存分配
- 21. C - 字符的內存大小指針
- 22. 使用多指針數組指針
- 23. c + +和多指針
- 24. C++多態不支持指針指針
- 25. (C++)list.error方法和使用指針刪除內存
- 26. 這是否使用C指針可以防止泄漏內存?
- 27. 內存使用正常指針處理C++
- 28. 使用無效的指針/內存地址:C++(windows)
- 29. 如何在C函數中使用雙指針分配內存?
- 30. 使用c中的指針覆蓋內存的可能性?
你應該小心成員函數指針的,因爲它們可以具有不同的尺寸,不同於常規的。見http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible更多血淋淋的細節。 – 2012-07-19 13:05:25