Преимущество небольших типов данных - PullRequest
3 голосов
/ 14 июля 2011

Может кто-нибудь объяснить мне, в чем преимущество небольших типов данных, таких как char (8-битный) или short (16-битный) по сравнению с int (32-битный) (особенно в C / C ++) .

На мой взгляд, это не приносит никаких преимуществ, особенно. на 32-битном компьютере, потому что размер его слова всегда 32-битный. Дело в компиляторе, что в некоторых случаях некоторые небольшие типы могут быть объединены в один регистр для экономии памяти? Итак, предназначены ли небольшие типы данных только для аппаратных архитектур ниже 32-битных и / или с небольшим объемом памяти?

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

1 Ответ

2 голосов
/ 14 июля 2011

Даже если размер слова в машине равен 32 битам, это не означает, что все типы данных хранятся в границе слова или что минимальной единицей хранения информации является слово. Скажите, что вы должны создать вектор из тысячи символов. Если вы создадите это так:

std::vector<char> v(1000);

он будет использовать около тысячи байтов (обычно). Если вы предполагаете, что минимальная единица хранения - это слово, вы можете объявить его вместо этого следующим образом (думая, что в любом случае каждый символ будет использовать 32-битное слово):

std::vector<int> v(1000);

но это даст вам около 4 байтов * 1000, что в четыре раза больше предыдущего объявления.

То есть, иногда, и в зависимости от того, как вы объявляете свои типы, они упаковываются, поэтому они не используют слово для хранения каждой части информации. В первом случае компилятор / реализация vector<char> создаст буфер из 1000 байтов для хранения всех упакованных символов.

Таким образом, ответ будет таким: преимущество заключается в экономии места в памяти.

...