2014-06-24 104 views
1

在大多數x86/x86_64體系結構中,一個地址指向一個字節。 但是在我使用的微控制器上,地址指向2個字節。C/C++:如何獲得一個地址尋址的字節數

有沒有辦法知道地址指向的字節數? (像宏或其他東西)

+0

沒有什麼,你可以用這些信息做是你得到它,將具有良好定義的行爲。 –

+1

這個問題不是我爲什麼需要這個。 -.-' –

+2

@hl:這就是爲什麼這不是答案。 –

回答

7

「字節」是指一臺機器上「最小的可尋址單元」;一個地址總是標識一個字節。在一些機器上,一個字節將是8位;在其他情況下,它可能是32位。

C標準定義char是最小的可尋址單元的機器上;和該單元中的位數的宏CHAR_BIT。它將成爲<limits.h>/<climits>中的一個宏。


C99 6.2.6.1腳註40表示:

甲字節包含CHAR_BIT比特,和類型unsigned char範圍從0至2 CHAR_BIT -1的值。

不完全正確,但強烈暗示如: C99 6.2.6.1/4:存儲在任何其他對象類型的非位字段對象

值包括n×CHAR_BIT位,其中n是該類型的對象的大小,以字節爲單位。

它說,sizeof(char) == 1

+0

有人可能會補充說,在硬件層面上,可能有不同類型的指針。我在'sizeof(char *)!= sizeof(int *)'的機器上工作過,因爲要尋址一個字節,機器需要額外的信息。 –

3

CHAR_BIT計算爲一個整數,它是目標平臺上的char中的位數。

char的目的是捕獲目標平臺上最小的單個可尋址單元的內存。這通常稱爲「字節」,不一定是8位。

8位數量的正確術語是an octet。實際上,8位字節非常常見,以至於該術語的含義已經改變。

你做

獲得訪問 CHAR_BIT宏觀
#include <limits.h> 
+1

不知道爲什麼這是被投票。我平時不是可惜的投票人,但它是正確的,所以+1 –

+0

酷。感謝您指出如何做上標:) –

+0

@BillyONeal不客氣,我沒有檢查標準,但它與'^'是可怕的,與按位異或的風險混淆。 – unwind