значение по умолчанию wordsize в UNIX/Linux

alterator-vm модуль alterator является менеджером по разделу, который работает с LVM, также.

Это используется в качестве инструмента по умолчанию в дистрибутивах ALT, также в установщике. Я не уверен, легко ли установить его в дистрибутиве кроме ALTLinux.

4
04.05.2013, 17:06
3 ответа

В целом wordsize решен целевую архитектуру при компиляции. Ваш компилятор будет обычно компилировать использование wordsize для существующей системы.

Используя gcc (среди других), можно также настроить это при помощи различных флагов. Например, на 64-разрядном хосте можно скомпилировать для 32-разрядной машины или вызвать 32-разрядные слова.

-m32  # int, long and pointer to 32 bits, generates code for i386.
-m64  # int, long and pointer to 64 bits, generates code for x86-64.
-mx32 # int, long and pointer to 32 bits, generates code for x86-64.

Необходимо также посмотреть на limits.h и inttypes.h видеть использование этого определения.


Для кросс-компиляции мультиlib выезда (32-разрядная ссылка на ТАК) и поиск tha сеть.

Проверьте то, что отмечает Ваш GCC, был создан с:

gcc -v

Относительно размеров они обычно тесно связаны с центральным процессором и связанные – таким как максимальный размер адреса памяти, размер регистров ЦП и т.д.

Для быстрого проблеска Вы не должны понимать большую часть этого, но в зависимости от того, где Вы - она, может дать некоторое понимание:

Если Вы используете gcc и скомпилируйте с -S флаг можно также посмотреть на инструкции по сборке. Здесь, немного сбивающий с толку, на, например, 32-разрядная машина слово составляет 16 битов и долго является 32-разрядным. (__WORDSIZE)

Так, например. movl $123, %eax средства перемещаются долго (32-разрядный - __WORDSIZE) 123 кому: eax регистр, и movw средства перемещают (16-разрядное) слово.


Это - соглашения о присвоении имен, – и только сказать это WORDSIZE может означать более затем одну вещь. Можно также столкнуться с кодом, где они, например, определяют что-то как

#define WORD_SIZE 16

поскольку все это зависит от контекста. При чтении данных из файла или потока, где источник имеет размер слова 16 битов, это было бы естественно. Только, чтобы указать, что не всегда принимают средства размера слова __WORDSIZE когда считано это в коде.


Пример с определяемым пользователем WORD_SIZE не влиял бы на систему команд в сгенерированном машинном коде. Для GCC в целом я рекомендовал бы эту книгу. (К сожалению, это немного старо – но должно все же найти, что подобное легкое читает более актуальную книгу. (Не то, чтобы я выглядел настолько твердым.) Это коротко, кратко и сладко. И если Вы только имеете в виду, что вещи могли измениться, такие как дополнительные функции и т.д., это дает хорошее введение не меньше.)

Это дает быстрое и хорошее введение различных аспектов при компиляции. Взгляд на главу 11 для хорошего объяснения цепочки компиляции.


Я не знаю ни о каких опциях в GCC для компиляции 16-разрядный. Один способ сделать это состоял бы в том, чтобы записать в использовании блока .code16 сообщать коду должно составить 16 битов.

Пример:

    .file "hello.s"
    .text
    .code16            /* Tel GAS to use 16-bit instructions. */
.globl start, _start
start:
_start:
    movb $0x48, %al
        ...

Это необходимо, например, загрузчики, такие как GRUB и LILO для подарка кода в MBR на Вашем жестком диске.

Причина этого состоит в том что, когда Ваши загрузки компьютера ЦП находится в специальном режиме, где он не имеет 32-разрядных но макс. 16-разрядных инструкций иначе Реальным режимом.

Короче говоря то, что происходит, - то, что BIOS делает тестирование оборудования, затем он загружает первые 512 байтов Вашего загрузочного диска в память и выходит из-под контроля к тому коду, запускающемуся в адресе 0. Этот код в свою очередь располагается, где следующий этап файлов находится, загружает их в память и продолжает выполнять наконец ввод Защищенного режима, где у Вас есть нормальный 32-разрядный режим.

6
27.01.2020, 20:47
  • 1
    после чтения Вашего ответа, я хочу попросить, чтобы, если WORDSIZE был определен как, 16 битов затем были бы то шоу некоторый эффект на код операции, который сгенерирован GCC, когда я компилирую с флагом-S. я имею в виду, был бы инструкции отличаться. –  ArunMKumar 04.05.2013, 14:48
  • 2
    @ArunKumar: Нет, это не влияло бы на ассемблерный код. Я должен был быть более последовательным в использовании __WORDSIZE в моем ответе также. Никогда не используйте подчеркивание перед, определяет (если Вы действительно не знаете то, что Вы делаете), поскольку они (обычно) резервируются для компилятора. Также, если Вы добавили определение как __WORDSIZE 16 это было бы, скорее всего, отвергнуто компилятором к 32. Если бы Вы хотите кросс-скомпилировать 64-битный код на 32-разрядной машине, Вам также был бы нужен мультиlib. Обратите внимание, что это добавляет много дополнительных. –  Runium 04.05.2013, 15:09
  • 3
    я изучаю мультиlib.. услышанный об этом ryt теперь только и также попробованный-m32,-m64 и флаги-mx32. вся компиляция кроме той с-m32 перестала работать. я могу предположить, что у меня нет мультиlib gcc установленным в моей системе. как я проверяю на это? –  ArunMKumar 04.05.2013, 15:32

Вот то, что мой имеет:

% cat /usr/include/bits/wordsize.h 
/* Determine the wordsize from the preprocessor defines.  */

#if defined __x86_64__
# define __WORDSIZE 64
# define __WORDSIZE_COMPAT32    1
#else
# define __WORDSIZE 32
#endif

Таким образом, это определяется wordsize.h, который идет с Вашим компилятором. Но интеллектуальный выберет соответствующий размер.

3
27.01.2020, 20:47

Необходимо смочь выбрать значение по умолчанию wordsize во время компиляции, обычно при помощи одного из -m32 или -m64 опции.

/usr/include/i386-linux-gnu/bits/wordsize.h разработан, чтобы использоваться при компиляции приложений на 32 бита.

Должен быть a /usr/include/x86_64-linux-gnu/bits/wordsize.h содержа 64 бита __WORDSIZE определение.

Это изменение было начато с Ubuntu 11.4: https://wiki.ubuntu.com/MultiarchSpec

Если -m64 сбои, у Вас могло бы быть распределение на 32 бита. uname -m скажет Вам.

Хотя возможно пересечь двоичные файлы компиляции 64 битов в системе на 32 бита, которая была бы неудобна, поскольку у Вас не будет простого способа выполнить их туда.

Если Ваш ЦП является моделью на 64 бита (свериться lscpu), Вы могли бы хотеть установить распределение на 64 бита, чтобы смочь легко создать пакеты мультидуги.

2
27.01.2020, 20:47
  • 1
    с-m64 опцией перестала работать в то время как та с флагом-m32, за которым следуют. –  ArunMKumar 04.05.2013, 16:23
  • 2
    Ответ обновляется. –  jlliagre 04.05.2013, 23:15

Теги

Похожие вопросы