2012-12-28 77 views
6

可能重複:
size_t vs. intptr_tuintptr_t和size_t是否相同?

我的一些使用指針的代碼交易,並採取uintptr_t作爲輸入,因爲它與指針的工作。

我現在必須對整數做同樣的事情,所以我想重用這段代碼。

size_t是否與uintptr_t相同?我是否可以更改實現並使用相同的代碼來指針和整數,只需將uintptr_t替換爲size_t

回答

15

size_t必須足夠大以包含最大的 可能對象的大小。 uintptr_t必須大到足以包含 任何指針。鑑於此,或多或少保證 sizeof(uintptr_t) >= sizeof(size_t)(因爲 中的所有字節必須是可尋址的最大可能的對象),但不是更多。 在具有線性尋址的機器上,它們可能是相同尺寸的 。另一方面,在分段體系結構上,由於uintptr_tuintptr_t的值通常大於size_t,因爲 對象必須位於單個段中,但指針必須能夠使用 來尋址所有內存。

2

它取決於實現(包括處理器,ABI,編譯器,標準庫)。您無法保證size_tuintptr_t相同;但是這可能發生(在32位Linux x86或ARM上,都是32位無符號整數)。

size_t的意圖是一個大小(特別是分配的內存塊),而uintptr_t的意圖是與指針相同的位大小的無符號整數。

-1

不同的編譯器有不同的結果。如果您希望它們具有相同的效果,您必須確保您的編譯器應該位於32位Linux x86或ARM上,那就是對的。

相關問題