|
Вот дампы кучи при работе программы.
Пользователь выбирает программу и в соответсвии с выбранной программой
приходят данные которые размещаются в куче.
Существует FIFO буфер на 8 программ. Далеее показаны дампы кучи после
X числа выбранных программ. Как выдно дальше 14 сегментов дело не пошло.
8 выборок
SEG 1: 0x030EB7BA <- 0x030EB8CA ->0x030EB91A Len=0x44 (FREE)
SEG 2: 0x030EB8CA <- 0x030EB91A ->0x030EB9E2 Len=0xBC (busy)
SEG 3: 0x030EB91A <- 0x030EB9E2 ->0x030EBC6E Len=0x280 (busy)
SEG 4: 0x030EB9E2 <- 0x030EBC6E ->0x030EBD06 Len=0x8C (busy)
SEG 5: 0x030EBC6E <- 0x030EBD06 ->0x030EBDCE Len=0xBC (busy)
SEG 6: 0x030EBD06 <- 0x030EBDCE ->0x030EBE76 Len=0x9C (busy)
SEG 7: 0x030EBDCE <- 0x030EBE76 ->0x030EBECA Len=0x48 (FREE)
SEG 8: 0x030EBE76 <- 0x030EBECA ->0x030EBF62 Len=0x8C (busy)
SEG 9: 0x030EBECA <- 0x030EBF62 ->0x030EBFFA Len=0x8C (busy)
SEG 10: 0x030EBF62 <- 0x030EBFFA ->0x030EC13A Len=0x134 (FREE)
SEG 11: 0x030EBFFA <- 0x030EC13A ->0x030EC1F2 Len=0xAC (busy)
SEG 12: 0x030EC13A <- 0x030EC1F2 ->0x00000000 Len=0x45BC (FREE)23 выборок
SEG 1: 0x030EB7BA <- 0x030EB87A ->0x030EB8B2 Len=0x2C (busy)
SEG 2: 0x030EB87A <- 0x030EB8B2 ->0x030EB976 Len=0xB8 (busy)
SEG 3: 0x030EB8B2 <- 0x030EB976 ->0x030EB9A6 Len=0x24 (busy)
SEG 4: 0x030EB976 <- 0x030EB9A6 ->0x030EB9E2 Len=0x30 (FREE)
SEG 5: 0x030EB9A6 <- 0x030EB9E2 ->0x030EBC6E Len=0x280 (busy)
SEG 6: 0x030EB9E2 <- 0x030EBC6E ->0x030EBCF6 Len=0x7C (busy)
SEG 7: 0x030EBC6E <- 0x030EBCF6 ->0x030EBD8E Len=0x8C (busy)
SEG 8: 0x030EBCF6 <- 0x030EBD8E ->0x030EBDF6 Len=0x5C (busy)
SEG 9: 0x030EBD8E <- 0x030EBDF6 ->0x030EBEF2 Len=0xF0 (FREE)
SEG 10: 0x030EBDF6 <- 0x030EBEF2 ->0x030EBF8A Len=0x8C (busy)
SEG 11: 0x030EBEF2 <- 0x030EBF8A ->0x00000000 Len=0x4824 (FREE)41 выборок
SEG 1: 0x030EB7BA <- 0x030EB932 ->0x030EB9BA Len=0x7C (busy)
SEG 2: 0x030EB932 <- 0x030EB9BA ->0x030EB9E2 Len=0x1C (FREE)
SEG 3: 0x030EB9BA <- 0x030EB9E2 ->0x030EBC6E Len=0x280 (busy)
SEG 4: 0x030EB9E2 <- 0x030EBC6E ->0x030EBD9E Len=0x124 (FREE)
SEG 5: 0x030EBC6E <- 0x030EBD9E ->0x030EBE4A Len=0xA0 (busy)
SEG 6: 0x030EBD9E <- 0x030EBE4A ->0x030EBEE2 Len=0x8C (busy)
SEG 7: 0x030EBE4A <- 0x030EBEE2 ->0x030EBF8A Len=0x9C (FREE)
SEG 8: 0x030EBEE2 <- 0x030EBF8A ->0x030EC036 Len=0xA0 (busy)
SEG 9: 0x030EBF8A <- 0x030EC036 ->0x030EC0F6 Len=0xB4 (busy)
SEG 10: 0x030EC036 <- 0x030EC0F6 ->0x030EC1AE Len=0xAC (busy)
SEG 11: 0x030EC0F6 <- 0x030EC1AE ->0x030EC276 Len=0xBC (busy)
SEG 12: 0x030EC1AE <- 0x030EC276 ->0x030EC33E Len=0xBC (busy)
SEG 13: 0x030EC276 <- 0x030EC33E ->0x00000000 Len=0x4470 (FREE)63 выборок
SEG 1: 0x030EB7BA <- 0x030EB862 ->0x030EB8FA Len=0x8C (busy)
SEG 2: 0x030EB862 <- 0x030EB8FA ->0x030EB962 Len=0x5C (busy)
SEG 3: 0x030EB8FA <- 0x030EB962 ->0x030EB98E Len=0x20 (FREE)
SEG 4: 0x030EB962 <- 0x030EB98E ->0x030EB9BE Len=0x24 (busy)
SEG 5: 0x030EB98E <- 0x030EB9BE ->0x030EB9E2 Len=0x18 (FREE)
SEG 6: 0x030EB9BE <- 0x030EB9E2 ->0x030EBC6E Len=0x280 (busy)
SEG 7: 0x030EB9E2 <- 0x030EBC6E ->0x030EBD06 Len=0x8C (busy)
SEG 8: 0x030EBC6E <- 0x030EBD06 ->0x030EBF52 Len=0x240 (FREE)
SEG 9: 0x030EBD06 <- 0x030EBF52 ->0x030EBFEA Len=0x8C (busy)
SEG 10: 0x030EBF52 <- 0x030EBFEA ->0x030EC08A Len=0x94 (busy)
SEG 11: 0x030EBFEA <- 0x030EC08A ->0x030EC122 Len=0x8C (busy)
SEG 12: 0x030EC08A <- 0x030EC122 ->0x030EC1EA Len=0xBC (busy)
SEG 13: 0x030EC122 <- 0x030EC1EA ->0x00000000 Len=0x45C4 (FREE)
Так что придерживаюсь мнения что malloc не портит картины а упрощает
написание ПО. Ессно при грамотном его использовании.
а не при таком (с) DASM.
char *ptr[100];
char *x;
for (int i = 0; i < 256; i++) {
ptr[i] = (char *) malloc (1);
}for (int i = 0; i < 256; i+=2) {
free (ptr[i]);
}x = (char *) malloc (2); // облом
случай приведен специально чтобы угробить кучу.
E-mail: info@telesys.ru