1

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

同理,我们能否通过C程序求出RAM的字长(即每个可寻址位置的大小)?

4

2 回答 2

3

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

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

也就是说,sizeof(void *) * CHAR_BIT通常至少会给出地址线数量的合理近似值——至少是架构理论上允许的数量,尽管可寻址内存的数量可能会有所不同。

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

于 2012-03-19T18:28:22.813 回答
0

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

于 2012-03-19T18:25:58.460 回答