У меня возникли некоторые мысли об этом, и вот случайная попытка сделать это со встроенными системами: * Сначала вам нужно проверить, какая утечка потока происходит. При выполнении alloc вы также должны подсчитывать для каждого потока количество активных распределений. Если количество распределений продолжает расти без освобождения, это подозрительная задача. * Во-вторых, вам нужно подсчитать количество распределений для распределений, исходящих из этого потока. Для этого замените alloc макросом. Используя макрос, вы можете сохранить имя файла и номер строки, в которой был вызван вызов.
, например
#define alloc(x) my_alloc(x, __LINE__, __FILE__)
void * my_alloc(size_t size, int line, char * file)
{
// increase number of allocations and dealocations for each combination line/file
}
Аналогично вам нужно определить my_free.
После этого запустите программу и распечатайте время от времени распределения, которые продолжают расти. Это должно помочь найти утечки памяти.
P.S. Я не тестировал это, но видел, что кто-то делает что-то подобное в нашем коде :)
Помимо обработки несостоявшегося malloc, вы также должны учитывать тот факт, что malloc не является детерминированной операцией. Другими словами, количество времени, которое malloc берет, может меняться от одного вызова к следующему и, как таковое, может привести к пропущению крайних сроков реального времени ... –
@ChrisDesjardins - отличная точка –