Существует ли стандартный способ обнаружить разрядную ширину аппаратных средств?

Переменные интервала типа являются предположительно "одним словом машины типа в длине", но во встроенных системах, компиляторах C для микро использования на 8 битов, чтобы иметь интервал 16 битов!, (8 битов для неподписанного символа) затем для большего количества битов, интервал обычно ведет себя: в 16 битах micros интервал 16 битов также, и в 32 битах micros интервал 32 бита, и т.д.

Так, есть ли standar способ протестировать его, что-то как BITSIZEOF (интервал)?

как "sizeof" для байтов, но для битов.

это было моей первой идеей

    register c=1;                
    int bitwidth=0;
    do
    {

        bitwidth++;

    }while(c<<=1);

    printf("Register bit width is : %d",bitwidth);

Но это берет c в качестве интервала, и распространено в компиляторах на 8 битов использовать интервал в качестве 16 битов, таким образом, это дает мне 16 как результат, кажется, что нет никакого standar для использования "интервала" как "ширина регистра", (или это не уважают),

Почему я хочу обнаружить его? предположите, что мне нужны много переменных, которым нужны меньше чем 256 значений, таким образом, они могут быть 8, 16, 32 бита, но использование правильного размера (то же как память и регистры) ускорит вещи и сохранит память, и если это не может быть решено в коде, я должен переписать функцию для каждой архитектуры

РЕДАКТИРОВАНИЕ, После того, как считано ответы я нашел эту хорошую статью

http://embeddedgurus.com/stack-overflow/category/efficient-cc/page/4/

Я заключу заключение в кавычки (добавил полужирный),

Таким образом нижняя строка - это. Если Вы хотите начать писать эффективный, портативный встроенный код, первый шаг, который необходимо сделать, является запуском с помощью типов данных C99 'меньше всего' и 'быстро'. Если Ваш компилятор не C99 совместимый, затем жалуются, пока это не – или поставщики изменения. Если Вы вносите это изменение, я думаю, что Вы будете приятно удивлены улучшениями размера кода и скорости, что достигнете.

5
задан Hernán Eche 27 July 2010 в 19:09
поделиться