Размер типа int зависит от компилятора и/или процессор?



будет ли размер целого числа зависеть от компилятора, ОС и процессора?

563   10  

10 ответов:

ответ на этот вопрос зависит от того, насколько далеко от практических соображений мы готовы вам.

любой толщина и эмулировать абсолютно ничего. Нет ничего, что помешало бы реализации C или c++ реализовать int тип любого размера и с любым представлением, если оно достаточно велико, чтобы соответствовать минимальным требованиям, указанным в стандарте языка. Практические примеры такого уровня абстракции легко доступны, например, языки программирования, основанные на платформе "виртуальной машины", например Java.

однако, C и C++ предназначены, чтобы быть высоко эффективное языки. Для достижения максимальной эффективности реализация C или C++ должна учитывать определенные соображения, вытекающие из основные аппаратные средства. По этой причине имеет смысл убедиться, что каждый базовый тип основан на некотором представлении, непосредственно (или почти непосредственно) поддерживаемом аппаратным обеспечением. В этом смысле размер основных типов зависит от аппаратного обеспечения.

другими словами, конкретная реализация C или C++ для 64-битной платформы аппаратного обеспечения / ОС абсолютно бесплатна для реализации int как 71-битный 1's-complement знаковый интегральный тип, который занимает 128 бит памяти, используя другие 57 биты как биты заполнения, которые всегда требуются для хранения даты рождения подруги автора компилятора. Эта реализация даже будет иметь определенную практическую ценность: она может быть использована для выполнения тестов времени выполнения переносимости программ C/C++. Но на этом практическая польза от такой реализации и закончится. Не ожидайте увидеть что-то подобное в "нормальном" компиляторе C/C++.

Да, это зависит как от процессоров (более конкретно, ISA, архитектура набора команд, например, x86 и x86-64), так и от компиляторов, включая модель программирования. Например, в 16-разрядных машинах sizeof (int) составлял 2 байта. 32-разрядные машины имеют 4 байта для int. Это было рассмотрено int был уроженца размер процессора, т. е. размер регистра. Однако 32-битные компьютеры были настолько популярны, и огромное количество программного обеспечения было написано для 32-битной модели программирования. Итак, было бы очень запутанно, если бы 64-разрядный компьютер имел 8 байт для int. И Linux, и Windows остаются 4 байта для int. Но, они отличаются по размеру long.

пожалуйста, взгляните на 64-битную модель программирования, как LP64 для большинства *nix и LLP64 для Windows:

такие различия на самом деле довольно неловко, когда вы пишете код, который должен работать как на Window, так и на Linux. Итак, я всегда использую int32_t или int64_t, а не long, через stdint.h.

Да, это было. Они имели в виду "от чего это будет зависеть: от компилятора или процессора"? В этом случае ответ в основном "оба.- Обычно,int не будет больше, чем регистр процессора (если это не меньше 16 бит), но он может быть меньше (например, 32-разрядный компилятор, работающий на 64-разрядном процессоре). Как правило, однако, вам понадобится 64-разрядный процессор для запуска кода с 64-разрядным int.

на основе некоторых недавних исследований я сделал изучение для прошивки интервью:

наиболее значительное влияние на процессоры битовой архитектуры ie, 8bit, 16bit, 32bit, 64bit является то, как вам нужно наиболее эффективно хранить каждый байт информации для того, чтобы наилучшим образом вычислить переменные в минимальное количество циклов.

размер бита вашего процессора говорит вам, что естественная длина слова процессор способен обрабатывать в одном цикле. 32-битная машина нуждается в 2 циклах для обработки 64-битного двойника, если он правильно выровнен в памяти. Большинство персональных компьютеров были и остаются 32-битными, следовательно, наиболее вероятной причиной типичного сходства компилятора C для 32-битных целых чисел с опциями для больших чисел с плавающей запятой и длинных длинных ints.

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

Я нашел этот сайт очень полезным,http://www.geeksforgeeks.org/archives/9705, для объяснения того, как естественная длина слова процессора влияет на то, как он будет хранить и обрабатывать большие и меньшие типы переменных, особенно в отношении упаковки битов в структуры. Вы должны быть очень осведомлены о том, как вы выбрано назначение переменных, потому что большие переменные должны быть выровнены в памяти, чтобы они принимали наименьшее количество циклов при делении на длину слова процессора. Это добавит много потенциально ненужного буфера / пустого пространства к таким вещам, как структуры, если вы плохо упорядочиваете назначение своих переменных.

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

рассмотрим у вас есть приложение windows, которое создает файл, где он пишет int плюс другие вещи, и читает его обратно. Что произойдет, если вы запустите это как на 32 битах, так и на 64 битах окна? Что произойдет, если скопировать файл, созданный на 32-битной системе, и открыть его в 64-битной системе?

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

размер типов данных зависит от процессора, потому что компилятор хочет сделать процессор более доступным для следующего байта. например: если процессор 32bit, компилятор не может выбрать размер int как 2 байта[который он должен выбрать 4 байта], потому что доступ к другим 2 байтам этого int(4bytes) займет дополнительный цикл процессора, который является отходом. Если компилятор выбирает int как 4 байта, процессор может получить доступ к полным 4 байтам за один выстрел, что ускоряет ваше приложение.

спасибо

размер int равен длине слова, которая зависит от базового ISA. Процессор - это просто аппаратная реализация ISA,а компилятор - это просто программная реализация ISA. Все вращается вокруг лежащего в основе ISA. Самый популярный ISA-это Intel IA-32 в эти дни. он имеет длину слова 32bits или 4bytes. 4 байта может быть максимальный размер' int ' (просто int, не короткие или длинные) компиляторы. на основе архитектуры IA-32, можно использовать.

размер типа данных в основном зависит от типа компилятора, а компиляторы разработаны на основе архитектуры процессоров, поэтому внешний тип данных можно считать зависимым от компилятора.например, размер целого числа составляет 2 байта в 16-битном компиляторе tc, но 4 байта в компиляторе gcc, хотя они выполняются в одном процессоре

http://www.agner.org/optimize/calling_conventions.pdf

"3 представление данных" содержится хороший обзор того, что компиляторы делают с целыми типами.

Да, я обнаружил, что размер int в turbo C составлял 2 байта, где, как и в компиляторе MSVC, это было 4 байта.

в основном размер int-это размер регистров процессора.

Comments

    Ничего не найдено.