Когда это хорошая идея для Маллока? - PullRequest
0 голосов
/ 05 апреля 2011

Я немного озадачен распределением памяти для моих переменных. Например, если Я создаю большую структуру данных (массив, структуру, объект и т. Д.) И инициализирую ее в области видимости main (), если мне нужно создать локальную переменную

int chessBoard[8][8] = ...

или я должен выделить память в куче?

int * chessBoard = new array[8][8];<br> *chessBoard = ...

Это имеет значение? Это льготный? Еще один эффективнее / умнее? Мне лично нравится выделять память для больших объектов, которые я не считаю достаточно маленькими для стекового фрейма. Но я действительно не знаю.

Ответы [ 3 ]

1 голос
/ 05 апреля 2011

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

int something[10000000];

вызовет ошибку памяти, но:

int *something = new int[10000000];

будет работать нормально.

1 голос
/ 05 апреля 2011

Основная причина использования динамической памяти, выделяемой malloc, заключается в том, что вы не знаете максимального объема памяти, который вам нужен во время компиляции.Для шахматной доски размер всегда восемь на восемь, и массив в порядке.На большинстве компьютеров массив int типа восемь на восемь крошечный.

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

Массивы немного быстрее, потому что компилятор резервирует место.С помощью malloc во время выполнения вызывается библиотечная функция для запроса памяти.Если у вас есть память, то в любом случае скорость обычно одинакова.

Использование указателей для доступа к памяти, выделенной malloc, немного сложнее, чем просто использование массива.Но вы должны понимать и то, и другое, если собираетесь быть программистом на Си.

Для очень больших объемов памяти вы должны использовать malloc.

Самая большая ошибка, сделанная с памятью, выделенной для malloc:забыв освободить его, когда закончите.Если вы забудете освободить его, у вас может быть утечка памяти.

1 голос
/ 05 апреля 2011

Как правило, лучше распределять память с помощью malloc, когда владение объектом должно быть много разослано.Если объект будет использоваться в единственном ссылочном блоке и не выпадет из области видимости, то локальная переменная определенно лучше.Все сводится к тому, «нужно ли вам висеть на нем после завершения цикла».

Если он определен в main (), как вы намекаете, то он, безусловно, будет действовать вечно (до закрытия приложения), в этом случае это становится гораздо больше вопросом личных предпочтений.Многие люди предпочитают локальные переменные, потому что их легче читать, а разыменование не выглядит грязным.

...