Определение количества адресных строк и размера слова RAM с помощью C - PullRequest
1 голос
/ 19 марта 2012

Может кто-нибудь, пожалуйста, дайте мне знать, как определить количество адресных строк в процессоре, используя C?Это не может быть равным размеру регистров процессора, поскольку количество адресных строк может отличаться по сравнению с размером регистров (например, в 8086 адресные строки равны 20, а размер регистров равен 16).

Аналогично, можем ли мы найти размер слова ОЗУ (означающего размер каждого адресуемого местоположения) в программе на C?

Ответы [ 2 ]

3 голосов
/ 19 марта 2012

Краткий ответ на все эти вопросы таков (по крайней мере, переносимым способом, который действительно определяется самим C), вы не можете.

Например, адресные строки являются особенно жесткими. Например, у DSP есть два или даже три совершенно отдельных адресных пространства, подключенных к одинаковому количеству каналов физической памяти, и каждый из них может иметь уникальный размер. Вместе с тем, даже если на процессоре имеется N адресных линий, памяти может (и часто будет) меньше, чем фактически подключено.

Тем не менее, sizeof(void *) * CHAR_BIT обычно дает, по крайней мере, разумное приближение количества адресных строк - по крайней мере, количество, теоретически допустимое архитектурой, хотя объем адресуемой памяти вполне может отличаться.

Стандарт гласит, что int должен быть "натуральным размером, предложенным процессором". Чаще всего (но определенно не всегда) это соответствует размеру целочисленных регистров процессоров.

0 голосов
/ 19 марта 2012

Насколько я знаю, ответ на оба вопроса определяется реализацией.В языке Си нет стандартизированных концепций этих вещей, поэтому нет стандартного кода для написания тестов.Вы можете их угадать, но это не делает ваш код переносимым.Определенный набор компиляторов может предоставить эти возможности, но опять же, это не сделает ваш код переносимым.

...