2010-08-28 2 views
1

Какой тип переменной может содержать 1,000,000,000 (десятичное число), занимает больше всего места в памяти?Переменная, которая может содержать большую часть памяти?

  1. INT в C
  2. строку в C
  3. строку в Java (который использует юникод)
+9

домашнее задание? _____ – kennytm

+0

Странный вопрос? Самое расточительное представление было бы строкой unicode, предполагая, что строка в C используется char [] – StuartLC

+0

строки в C тоже могут быть unicode ... –

ответ

3

Java, строка. Под капотом Java String состоит из объекта с 3 полями, один из которых указывает на отдельный объект массива, содержащий символы. Плюс, конечно, строки Java состоят из 16-битных символов.

Если вы беспокоитесь об использовании памяти по всем другим критериям, не используйте Java. Но для большинства приложений использование памяти является наименьшей из ваших проблем.

Следует отметить, что 1,000,000,000 может быть представлено с использованием Java int, который будет иметь тот же размер, что и C-подписанное или беззнаковое (32-разрядное) целое число.

Кроме того, C int является необязательно достаточно большой, чтобы представлять 1,000,000,000. На некоторых платформах int - это 16 бит, и это разрешено стандартом C.

+1

Y - для уточнения, C определяет int как собственный размер машинного слова (так что int может быть 16, 32 или 64 бит и т. Д.).Я думаю, что технически C int может быть самым неэффективным хранилищем для 1BN в сценарии с 512-битным машинным словом, но, надеюсь, я не буду рядом, чтобы это увидеть. – StuartLC

+3

@nonnb - чтобы быть абсолютно технически корректным, стандарт C говорит, что диапазон 'int' составляет не менее -32758 до +32767. Это может быть (и часто) больше этого. Тем не менее, стандарт говорит * абсолютно ничего * о 'int' того же размера, что и« родное машинное слово ». –

1

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

Также это может быть полезно, как конвертировать между двоичной и десятичной:

1

В стандарте C не указано много требований к хранению. Как это, вы могли бы:

  • 256-бит C int s, которые занимают 32 байта для хранения ничего (см @ комментарий nonnb в)
  • Широкая строка C (wchar_t[]), который использует UCS-4/UTF -32 символов (как все реализации GNU делать, очевидно)
  • реализации переменного тока, который использует 32-битовые char с (который должен был бы быть в системе с 32-битовых байтов)
+0

Кстати, 21-бит-или-больше 'wchar_t' является единственным способом реализации C-совместимого варианта поддержки всех Unicode. Это также рекомендуется (см. Макрос __STDC_ISO_10646__ в C99). Реализации с 16-разрядным 'wchar_t' просто сломаны. –

+0

как насчет многосимвольных последовательностей? как насчет UTF-8 и 16? – aib