Я хотел бы знать, сколько оперативной памяти я использую в своем проекте, насколько я могу судить, нет никакого способа фактически решить это (кроме как пройти и вычислить это непосредственно). Я попал на стадию в довольно большом проекте, где я определил, что у меня заканчивается ОЗУ.
Я решил это, потому что я могу добавить раздел, а затем все адские разрывы где-то еще в моем коде без видимой причины. Если я #ifndef
что-то еще, это работает снова. В новом коде нет ничего плохого
Некоторое время я подозревал, что получаю конец доступной оперативной памяти. Я не думаю, что я использую слишком много стека (хотя это возможно), каков наилучший способ определить, сколько ОЗУ я фактически использую?
Проходя и пытаясь решить это, у меня возникают проблемы, когда я получаю перечисления и структуры; сколько памяти они стоят?
Первое редактирование: ТАКЖЕ, с самого начала я так много редактировал свой эскиз, это не фактические результаты, которые я изначально получил, а то, что я получаю сейчас.
text data bss dec hex filename
17554 844 449 18847 499f HA15_20140317w.cpp.elf
16316 694 409 17419 440b HA15_20140317w.cpp.elf
17346 790 426 18562 4882 HA15_20140317w.cpp.elf
Первая строка (с текстом 17554) не работала, после большого редактирования вторая строка (с текстом 16316) работает как надо.
редактировать: в третьей строке все работает, последовательное чтение, мои новые функции и т. д. Я по существу удалил некоторые глобальные переменные и дублировал код. Я упоминаю об этом, потому что (как и предполагалось) речь идет не об этом коде, а об использовании оперативной памяти. Что возвращает меня к первоначальному вопросу: «Как лучше измерить это?» Я все еще проверяю некоторые ответы, спасибо.
Как я на самом деле интерпретировать вышеупомянутую информацию?
Пока что мое понимание таково:
`TEXT` is program instruction memory
`DATA` is variables (unitialised?) in program memory
`BSS` is variables occupying RAM
поскольку BSS значительно меньше 1024 байта, почему второй работает, а первый нет? Если это так, DATA+BSS
то оба занимают более 1024.
повторное редактирование: я отредактировал вопрос, включив в него код, но теперь я удалил его, потому что это действительно не имело никакого отношения к проблеме (кроме, возможно, плохой практики кодирования, объявления переменных и тому подобного). Вы можете просмотреть код, просматривая изменения, если вы действительно хотите его увидеть. Я хотел вернуться к рассматриваемому вопросу, который был более основан на: как измерить использование оперативной памяти.
String
тип в своих программах? Известно, что это часто выполняет динамическое выделение и освобождение памяти, что может привести к фрагментации кучи до такой степени, что у вас может не остаться памяти.
String
s из-за накладных расходов. Я счастлив работать с массивами символов, тем не менее, я почти всегда определяю все свои массивы символов с фиксированным размером (на данный момент у меня есть ОДИН байтовый массив, который не только потому, что я изменяю длину содержимого для разных перекомпиляций.