Как мы видим макрос, определенный в stdint.h или bits/types.h и т. Д., Который является __WORDSIZE. Я не знаю, где проверить, задан ли этот макрос. Кроме того, есть способ проверить различные размеры базовых типов без использования sizeof в c. Я имею в виду, есть ли документ, показывающий размер этих переменных?как проверить слова на linux
1
A
ответ
1
Ну, это зависит от платформы. Во-первых, существуют некоторые требования, установленные стандартом C и/или стандартом POSIX, если вы используете UNIX. Такие вещи, как sizeof(int) <= sizeof(long)
или sizeof(char) == 1
Тогда ABI имеет последнее слово. Например, на Linux/FreeBSD/Solaris на x86_64, они используют общий ABI: http://people.freebsd.org/~obrien/amd64-elf-abi.pdf
3.1.2 в этом документе, имеет размер для всех типов для этого ABI
Спасибо вам проникающее мнение первых, я Бесполезный Не знаю, аби ограничивают размеры данных. Я думал, что размеры данных - это просто работа компилятора. Вот еще один вопрос: содержит ли эльф какую-либо информацию о том, с каким типом определяется переменная? Я думал, что эльф просто содержит ассемблерный код в текстовой части, почему он мешает определить размеры типа данных? Это немного озадачило меня. – dspjm
@dspjm ABI по определению не переносится. Он определяет, что такое бинарный интерфейс конкретной платформы (архитектура архитектуры OS +). Было бы неоптимально иметь ABI, который работает как на 32-битных, так и на 64-разрядных процессорах x86. x86_64 имеет намного больше регистров, а код генерации компилятора, который нацелен на ABI, не сможет использовать эти регистры для передачи параметров и т. д. (обратите внимание, что некоторые ABI делают это для целей перехода, например sparc v8plus). Заголовок ELF содержит некоторую информацию о целевом процессоре и целевой ОС, но не определяет полный ABI – Guillaume