2014-06-24 56 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