эквивалент size_t в F # - PullRequest
       2

эквивалент size_t в F #

1 голос
/ 06 октября 2011

Я вижу, что в F # тип List.length - это список -> int

Можно ли предположить, что int всегда будет достаточно большим, чтобы содержать размер любого списка, который я мог бы создать,и это потому, что списки ограничены элементами 4G?

В книге, из которой я учусь (Expert F # 2.0), говорится, что int и int32 имеют одинаковый размер, поэтому я решил написать свою первую программу с typedef дляsize_t.Это неприятно, потому что требует от меня явного указания компилятору, какие константы типа я имею в виду (например, 7UL вместо 7), хотя я ожидаю, что этого можно избежать, превратив size_t в объект с помощью конструктора int.Я также ожидаю, что это вызовет ряд других проблем: - (

Итак, какое обычное решение, пожалуйста? Я просто использую целые числа везде и игнорирую барьер 4G? Индексы массива тоже целые, поэтому это не так.как я мог бы сделать много полезного с моим типом size_t, даже если бы я был в состоянии реализовать его достаточно хорошо для использования.

Большое спасибо заранее.

Ответы [ 3 ]

2 голосов
/ 07 октября 2011

В .NET вы можете выделить только массив размером 2 ГБ (даже если вы используете 64-битную версию и имеете достаточно памяти). Если вы действительно хотите хранить это количество данных, то вам, вероятно, стоит использовать массивы, потому что списки F # имеют большие накладные расходы.

По этой причине вам, вероятно, не нужно беспокоиться о том, что длина ограничена 32-битным int. Единственный случай, когда вам будет важно, если вы пишете структуру данных, чтобы обойти это ограничение в 2 ГБ.

2 голосов
/ 06 октября 2011

Массив 4G, потребует 16 ГБ ОЗУ, и это только для дюймов (и ничего более сложного).Если у вас нет такого большого количества памяти, нет причин заботиться об этом пределе.Если вы действительно хотите использовать столько памяти, рассмотрите возможность разделения вашего массива на 2-3 массива.

1 голос
/ 06 октября 2011

В .NET используйте «int» для размеров коллекции.Он достаточно велик для случая 99,999%, и лучше всего иметь стандартные типы для всех API.

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