使用C确定地址行数和RAM字大小

时间:2012-03-19 18:22:09

标签: c x86 hardware ram addressing

任何人都可以告诉我如何确定使用C的处理器中的地址线数量?这不能等于处理器寄存器的大小,因为与寄存器的大小相比,地址线的数量可能不同(例如,在8086中,地址线是20,而寄存器的大小是16)。

同样,我们可以通过C程序找到RAM的字大小(意味着每个可寻址位置的大小)吗?

2 个答案:

答案 0 :(得分:3)

几乎所有这些的简短回答是(至少以可移植的方式由C本身确定),你不能。

例如,地址线是一个特别棘手的地址。例如,相当多的DSP有两个甚至三个完全独立的地址空间连接到相同数量的物理内存通道 - 每个地址空间可能具有唯一的大小。除此之外,即使处理器上有N个地址线,也可能(通常会)比实际连接的内存更少。

尽管如此,sizeof(void *) * CHAR_BIT通常至少会给出地址线数量的合理近似值 - 至少是架构理论上允许的数量,尽管可寻址存储器的数量可能差异很大。

标准说int应该是处理器建议的"自然尺寸"。通常情况下(但绝对不总是)与处理器整数寄存器的大小相同。

答案 1 :(得分:0)

据我所知,这两个问题的答案都是实施定义的。在C语言中没有这些东西的标准化概念,因此没有标准代码来编写测试。您可以猜测它们,但这并不能使您的代码可移植。特定的编译器套件可能会提供这些功能,但同样不会使您的代码可移植。