Подтвердить что ты не робот

Должен ли я использовать "long" вместо "int" на 64-битных языках с фиксированным размером шрифта (например, Java, С#),

В 10 или даже 5 лет не будет 32-разрядных ЦП [ Edit2: серверных или настольных].

Итак, есть ли преимущества в использовании int (32 бит) над long (64 бит)?
И есть ли недостатки в использовании int?


Edit:

  • В 10 or 5 years я имел в виду в подавляющем большинстве мест, где используются эти языки

  • Я имел в виду, какой тип использовать по умолчанию. В эти дни я даже не буду думать, следует ли использовать short как счетчик циклов, просто for(int i.... Точно так же счетчики long уже выигрывают

  • регистры уже 64-битные, в 32-битных типах уже нет усиления. И я думаю, что некоторые потери в 8-битных типах (вам нужно работать с большим количеством бит, чем вы используете)

4b9b3361

Ответ 1

Если вы работаете на 64-битном процессоре и вы скомпилировали свой код для 64-битного, то, по крайней мере, некоторое время, long, скорее всего, будет более эффективным, так как оно соответствует размеру регистра. Но действительно ли это повлияет на вашу программу, является спорным. Кроме того, если вы используете long повсюду, вы обычно будете использовать больше памяти - как в стеке, так и в куче - что может негативно сказаться на производительности. Есть слишком много переменных, чтобы точно знать, насколько хорошо ваша программа будет работать с long по умолчанию вместо int. Есть причины, по которым это может быть быстрее и почему это может быть медленнее. Это может быть полная стирка.

Типичная вещь - просто использовать int, если вам не нужен размер целого. Если вам нужно 64-битное целое число, то вы используете long. Если вы пытаетесь использовать меньше памяти, а int намного больше, чем вам нужно, вы используете byte или short.

x86_64 Процессоры будут разработаны для эффективной обработки 32-битных программ, и поэтому не нравится использование int, что приведет к серьезному ухудшению производительности. Некоторые вещи будут быстрее из-за лучшего выравнивания, когда вы используете 64-битные целые числа на 64-битном процессоре, но другие вещи будут медленнее из-за повышенных требований к памяти. И, вероятно, существует множество других факторов, которые могут определенно повлиять на производительность в любом направлении.

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

Лично я бы посоветовал вам следовать типичному маршруту использования int, когда вам не нужен размер целого и использовать другие типы, когда вы это делаете.

Ответ 2

32-разрядный - все еще полностью допустимый тип данных; точно так же, как у нас есть 16-бит и байты. Мы не выбрасывали 16-битные или 8-битные номера при переходе на 32-разрядные процессоры. 32-разрядное число составляет половину размера 64-битного целого числа в терминах хранения. Если бы я моделировал базу данных, и я знал, что значение не может превышать то, что может хранить 32-битное целое число; Я бы использовал 32-разрядное целое для хранения. Я бы сделал то же самое с 16-битным номером. 64-битное число занимает больше места в памяти; хотя ничто существенное, данное сегодня, персональные ноутбуки могут поставляться с 8 ГБ памяти.

Нет недостатка в том, что он отличается от меньшего типа данных. Он спрашивает: "Где я должен хранить свой сахар? В сахарной чаше или бункере?" Ну, это зависит от того, сколько сахара у вас есть.

Архитектура процессора не должна иметь большого отношения к тому типу данных размера, который вы используете. Используйте то, что подходит. Когда у нас есть 512-битные процессоры, мы все равно будем иметь байты.

ИЗМЕНИТЬ

Чтобы обратиться к комментариям/изменениям.

  • Я не уверен, что "не будет 32-разрядных настольных процессоров". ARM в настоящее время 32-бит; и не проявил большого интереса к 64-битной версии; на данный момент. Это не слишком хорошо сочетается с "Desktop" в вашем описании; но я также думаю, что через 5-10 лет резко изменится и ландшафт того типа устройств, который мы пишем программное обеспечение. Таблетки нельзя игнорировать; люди захотят запускать на них С# и Java-приложения, учитывая, что Microsoft официально портировала Windows 8 на ARM.

  • Если вы хотите начать использовать long; преуспевать. Нет причин не делать этого. Если мы смотрим только на процессор (игнорируя размер хранилища) и делая предположения, что мы находимся в архитектуре x86-64, то это не имеет особого значения.

  • Предполагая, что мы придерживаемся архитектуры x86; это правда. У вас может получиться чуть больший стек; в зависимости от того, какую структуру вы используете.

Ответ 3

Извините за ответ С++.

Если размер типа имеет тип размера:

  • uint8_t
  • int32_t
  • int64_t
  • и т.д.

Если размер не имеет значения, используйте выразительный тип:

  • size_t
  • ptrdiff_t
  • ssize_t
  • и т.д.

Я знаю, что D имеет размерные типы и size_t. Я не уверен в Java или С#.