|
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 66
|
|
Char, short, int, long: какой тип выбрать?25.09.2015, 00:06. Показов 6194. Ответов 10
Метки нет (Все метки)
Всем привет
Читая книги по C++ столкнулся с тем, что везде пишут примерно одно и тоже. Допустим про char, short, int, long пишут что типо лучше всего использовать тип int. И приводят доводы что это так сказать золотая середина между всеми этими типами. Но вот допустим если я знаю, что у меня в программе будут использоваться числа не превосходящие число 100. Зачем мне попросту тратить память указывая тип int(4 байта), когда вместо этого я бы мог обойтись типом short(2 байт). Итого если у меня в программе предположим используется 10 типов int - это займет 40 байт. А если использовать short то всего лишь 20 байт. Разница на мой взгляд есть. Так вот хотелось бы услышать ваше мнение по этому поводу, стоит ли использовать short или все же лучше пользоваться int и не заморачиваться.
0
|
|
| 25.09.2015, 00:06 | |
|
Ответы с готовыми решениями:
10
Создать объединение, что содержит элементы типов char int short fload long string Напишите программу, которая будет определять размер для данных (int, char, long, double, short, unsigned, float) и выводить информацию |
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
| 25.09.2015, 00:13 | ||
|
Поначалу лучше всего, вначале обучения, но не действительно лучше. До той поры, пока не придет осознание, что в этот вот тип вмещается столько-то байт, а больше мне и не надо, имеет смысл использовать int (unsigned int). А в short вообще-то не обязательно 2 байта.
2
|
||
|
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
|
||
| 25.09.2015, 00:21 | ||
|
http://www.cplusplus.com/reference/cstdint/
1
|
||
|
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 66
|
|||
| 25.09.2015, 00:23 [ТС] | |||
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||||
| 25.09.2015, 00:32 | ||||||||||||||
Сообщение было отмечено DrOffset как решение
Решениеhttp://rextester.com/LOM90476
и использование short не сэкономило вам память. другой пример: http://rextester.com/FKWTN73961
возникает вопрос: почему компилятор стремится выровнять данные по границе int? это связанно с оптимизацией вычислений по разрядной сетке машины. int - это тип данных, который лучше всего обрабатывается на данной платформе. поэтому, что бы оптимизировать различные вычисления, компилятор стремится выравнивать данные в структурах по его границе (здесь есть нюансы, например double выравнивается по границе двойного машинного слова, но не суть) цемес в том, что используя short вы действительно можете сэкономить память, но только если хорошо понимание что делаете. однако в большинстве случаев либо сэкономить вообще не получится. либо вы сэкономите копейки, ценой потери быстродействия. Добавлено через 2 минуты стандарт гарантирует:
http://en.cppreference.com/w/cpp/language/types
4
|
||||||||||||||
|
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 66
|
|
| 25.09.2015, 00:43 [ТС] | |
|
hoggy, т.е лучше не заморачиваться да
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||||||
| 25.09.2015, 01:05 | ||||||
|
dicros, вообще имеет смысл заморачиваться. Надо понимать что нет панацеи от всех болезней и иногда выгодно одно, а иногда другое.
1
|
||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 25.09.2015, 01:23 | |
|
1
|
|
|
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
|
|
| 25.09.2015, 10:31 | |
|
Важно не хранить указатели ни в одном из этих типов (например int и long), что сгубило многие x86 приложения (библиотеки) при переходе на x64. Для подобных случаем есть, как уже заметили про cstdint, тип "intptr_t" и "uintptr_t".
2
|
|
|
|
|
| 25.09.2015, 16:50 | |
|
Помимо того, что переменная занимает память, ещё играет роль и скорость вычислений. Размер типа int обычно устроен таким образом, что в аппаратуре есть операции, которые умеют работать с типом такого размера. Более того, если выполнять арифметические операции над короткими типами (char и short), то по стандарту сначала операнды преобразуются к типу int, затем выполняется операция в терминах int'а, а затем результат обратно преобразуется. Во многих случаях эти преобразования успешно схлопываются оптимизациями, но не всегда
C char a, b, c, d; void foo (void) { a = (a * b) / (c * d); } Code movsbl a, %eax movsbl b, %edx movsbl c, %ecx imull %edx, %eax movsbl d, %edx imull %edx, %ecx cltd idivl %ecx movb %al, a ret Code movl a, %eax imull b, %eax movl c, %ecx imull d, %ecx cltd idivl %ecx movl %eax, a ret
1
|
|
|
1 / 1 / 0
Регистрация: 24.04.2014
Сообщений: 66
|
|
| 25.09.2015, 21:32 [ТС] | |
|
Всем спасибо за разъяснения, учту на будущее...
0
|
|
| 25.09.2015, 21:32 | |
|
Помогаю со студенческими работами здесь
11
Преобразование 2-х char в один short int записать по-битого один short int в два char Двоичный дамп short и char выводится как int Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|