Информация об изменениях

Сообщение Re: Выделение памяти malloc от 02.04.2017 8:29

Изменено 02.04.2017 8:30 rg45

Re: Выделение памяти malloc
Здравствуйте, plastictown, Вы писали:

P>Доброго времени суток! Дабы не заплесневеть, решил сделать на Си динамический массив типа std::vector. Все работает, я доволен, но не могу выделить больше ~800Кб памяти (на самом деле в 4 раза больше с учетом дополнительного буфера). Пишет Not enough space. Читал форумы, говорят, что malloc умеет выделять память только подряд или вроде того, а подряд может не быть. Как же тогда же делить 10 Мб, если нужно? делать список вместо массива? Или я чего-то не понимаю?


1. Одно ищ требований стандарта к std::vector — это чтобы все его элементы располагались в непрерывной области памяти. Поэтому если сделать список вместо массива, это уже будет существенно отличаться от std::vector.

2. Просто, что бы убедиться, что проблема именно в malloc, попробуй создать приложение в котором не будет ничего, кроме одиночеого выделения памяти с помощью malloc. Если проблема при этом исчезнет, то ищи ошибку в своем коде.
Re: Выделение памяти malloc
Здравствуйте, plastictown, Вы писали:

P>Доброго времени суток! Дабы не заплесневеть, решил сделать на Си динамический массив типа std::vector. Все работает, я доволен, но не могу выделить больше ~800Кб памяти (на самом деле в 4 раза больше с учетом дополнительного буфера). Пишет Not enough space. Читал форумы, говорят, что malloc умеет выделять память только подряд или вроде того, а подряд может не быть. Как же тогда же делить 10 Мб, если нужно? делать список вместо массива? Или я чего-то не понимаю?


1. Одно из требований стандарта к std::vector — это чтобы все его элементы располагались в непрерывной области памяти. Поэтому если сделать список вместо массива, это уже будет существенно отличаться от std::vector.

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