-
- man mallinfo -- в приличной C-библиотеке он есть. - fk0(02.11.2020 13:09, ссылка)
- если имеется ввиду всё ли развернулось... анализировать ответ =)) я
так периодически нахожу багги, когда heap не хватает... тогда такие
феерические глюки... - sav6622(30.10.2020 21:10)
- не очень понятно что значит "всё ли развернулось" , размер heap и
stack известен (если конечно все норм), если будет известно кол-во
занятого озу, по средствам не хитрых мат вычислений можно получить
максимальный размер буфера обмена и под него выделить память - Aleksey_75(30.10.2020 21:16)
- Обьекты создаются ОДИН РАЗ за время работы устр-ва по приходу конфигурации (и НЕ уничтожаются)... размер обьекта меняется при перекомпиляции, проще смотреть все ли развернулись, чем пытаться их посчитать и сравнить с остатком доступной памяти... sav6622(81 знак., 02.11.2020 13:30)
- Кстати, максимальный кусок легко найти двоичным поиском. 16 ok, 32 ok, 64 ok, 128 ok, 256 fail, 192 ok, ... - SciFi(30.10.2020 21:26)
- Куча фрагментируется. То есть сумма размеров свободных кусков и
размер максимального свободного куска — это не одно и то же. Ну и
есть ли смысл выделять буфер недетерминированного размера? Как-то
это не по-ымбеддерски. Типа сегодня работает, а завтра нет. Или
наеборот. - SciFi(30.10.2020 21:25)
- A как по-ембеддерски? Ставить лишние пару мегабайт внешней статической памяти? Очевидно, что при использовании динамически выделяемой памяти нужен определённый подход: fk0(2193 знак., 02.11.2020 13:24)
- TLSF - Evgeny_CD(30.10.2020 21:39, ссылка)
- ну скажем так, нужен транзитный буфер(buf) для передачи pc->usb->buf->spi_flash, это буфер используется только в одном модуле и если работает этот модуль все остальные модули проги курят в сторонке, выигрыш от размера транзитного буфера не сильно большой , но имеется! Вот поэтому и воопрашаю! - Aleksey_75(30.10.2020 21:35)
- не очень понятно что значит "всё ли развернулось" , размер heap и
stack известен (если конечно все норм), если будет известно кол-во
занятого озу, по средствам не хитрых мат вычислений можно получить
максимальный размер буфера обмена и под него выделить память - Aleksey_75(30.10.2020 21:16)
- Сделай обёртку, которая суммирует кол-во выделенной памяти. - SciFi(30.10.2020 21:10)
- а можно подробнее, плиз! Никогда не пользовал malloc, а сейчас
попробовал в проге на CVI и выпал в осадок, размер проги сократился
в 10 раз , да и сама прога стала летать - Aleksey_75(30.10.2020 21:19)
- А сколько вызовов маллок в проге? - VLLV(30.10.2020 21:36)
- один! но до этого был static массив на 8мб , сейчас malloc
выделятся ровно по размеру загружаемого файла (вполне возможно
дальше будет и 16мб но прогу уже править не придётся) - Aleksey_75(30.10.2020 21:38)
- мсье знает толк в извращениях... - SciFi(30.10.2020 21:42)
- да, я такой) а что не так ? - Aleksey_75(30.10.2020 21:43)
- Единственный потребитель маллока ничем не отличается от статически
выделенного объекта. Если нужно занять всю память, оставшуюся после
выделения стека и статических объектов, маллок не нужен. Границы
областей памяти доступны в виде специальных символов при линковке.
Кстати, обычно при помощи этих символов и определяются границы кучи
для маллока. - SciFi(30.10.2020 21:46)
- пример маллоком привел для проги для ПК , без маллока прога имела
размер 8625кб, с маллоком 625кб ))) - Aleksey_75(30.10.2020 21:54)
- Пытаюсь понять, каким макаром этот топик попал в раздел арм... - SciFi(30.10.2020 22:40)
- это примеры пользования маллока , вот суть Aleksey_75(7 знак., 30.10.2020 22:44, ссылка)
- Внутри экзешника лежало 8МБ нулей. Мда. - LightElf(30.10.2020 22:28)
- еще не вечер ))) есть у меня утильная прога, размером в 86мб,
глянул, нулей там 80мб ))) два массива один на 50мб второй 30 )) - Aleksey_75(30.10.2020 22:44)
- Это вы как-то специфически компилируете. Компилятор должен
поместить массив в секцию BSS, а BSS в бинарник нормальные линкеры
не кладут - он создаётся при загрузке. - LightElf(31.10.2020 11:43)
- static int array[100500] = { 123 }; - SciFi(31.10.2020 12:07)
- "Но накуя, Холмс?" - LightElf(31.10.2020 14:10)
- for the lulz - SciFi(31.10.2020 14:11)
- "Но накуя, Холмс?" - LightElf(31.10.2020 14:10)
- static int array[100500] = { 123 }; - SciFi(31.10.2020 12:07)
- Это вы как-то специфически компилируете. Компилятор должен
поместить массив в секцию BSS, а BSS в бинарник нормальные линкеры
не кладут - он создаётся при загрузке. - LightElf(31.10.2020 11:43)
- Тут маллок оправдан как нигде :-)) - sav6622(30.10.2020 22:31)
- еще не вечер ))) есть у меня утильная прога, размером в 86мб,
глянул, нулей там 80мб ))) два массива один на 50мб второй 30 )) - Aleksey_75(30.10.2020 22:44)
- Пытаюсь понять, каким макаром этот топик попал в раздел арм... - SciFi(30.10.2020 22:40)
- пример маллоком привел для проги для ПК , без маллока прога имела
размер 8625кб, с маллоком 625кб ))) - Aleksey_75(30.10.2020 21:54)
- Единственный потребитель маллока ничем не отличается от статически
выделенного объекта. Если нужно занять всю память, оставшуюся после
выделения стека и статических объектов, маллок не нужен. Границы
областей памяти доступны в виде специальных символов при линковке.
Кстати, обычно при помощи этих символов и определяются границы кучи
для маллока. - SciFi(30.10.2020 21:46)
- да, я такой) а что не так ? - Aleksey_75(30.10.2020 21:43)
- мсье знает толк в извращениях... - SciFi(30.10.2020 21:42)
- один! но до этого был static массив на 8мб , сейчас malloc
выделятся ровно по размеру загружаемого файла (вполне возможно
дальше будет и 16мб но прогу уже править не придётся) - Aleksey_75(30.10.2020 21:38)
- А сколько вызовов маллок в проге? - VLLV(30.10.2020 21:36)
- а можно подробнее, плиз! Никогда не пользовал malloc, а сейчас
попробовал в проге на CVI и выпал в осадок, размер проги сократился
в 10 раз , да и сама прога стала летать - Aleksey_75(30.10.2020 21:19)