Ik probeer in m'n AI het volgende te bouwen; een malloc van pagesize, waardoor de eerste op null komt en ik gewoon met pointers (in de malloc) ed kan werken en 'imagen' naar de hd zonder alles om te hoeven zetten. So far, so good. Dat heb ik nog niet werkend, maar daar ben ik dan ook nog niet aan begonnen.
Ik wil namelijk ook dat als m'n page vol zit ik er een tweede page achter kan plakken. Hier ben ik al wel de hele dag mee in de weer. Om dit te laten werken doe ik wat vuile pointer -> int en int -> pointer casts, maar het werkt prachtig. Denk ik iig, want mem leaks zijn lastig te zien (als iemand het hier niet mee eens is, 1) bekijk m'n code en geef commentaar of 2) vertel me hoe ik kan checken op mem leaks in freeBSD, dank dank, maar niet m'n eigenlijk vraag
) en ik heb tot nu toe geen system crashes gehad, wat ik eigenlijk zo wil houden.
De vraag rees alleen, hoe weet free aan het einde nog hoe groot de malloc was als ik de pointer in de tussentijd naar een tiental andere mallocs heb laten wijzen? Hoe gaat dit zowiezo? In mijn geval zijn alle mallocs even groot, maar wat als dat niet zo is?
M'n idee was dat de kernel aan gemallocceerde geheugenadressen knoopt wat de grootte was en dit ergens bij houd. Ik kan dit alleen nergens bevestigd vinden (en heb verder geen diepe kennis van kernels) en wil toch er zeker van zijn dat ik niet met een hele lading memory leaks zit aan het einde van het verhaal.
Voor de
, m'n test code staat hier. En voor degene die denkt dat de casts niet nodig zijn als ik een struct aan maak, vertel mij maar hoe ik een class zo bouw dat er eerst een pointer komt, dan alle beschikbare ruimte in m'n page (getpagesize - 2 pointers) en tot slot weer een pointer. Leek mij onmogelijk, en dit werkt goed. Okeej... het werkt niet op 64 bit systemen (of iig systemen met pointers anders dan 4 bytes groot) maar daar kan ik (voorlopig) nog mee leven.
Ik wil namelijk ook dat als m'n page vol zit ik er een tweede page achter kan plakken. Hier ben ik al wel de hele dag mee in de weer. Om dit te laten werken doe ik wat vuile pointer -> int en int -> pointer casts, maar het werkt prachtig. Denk ik iig, want mem leaks zijn lastig te zien (als iemand het hier niet mee eens is, 1) bekijk m'n code en geef commentaar of 2) vertel me hoe ik kan checken op mem leaks in freeBSD, dank dank, maar niet m'n eigenlijk vraag
De vraag rees alleen, hoe weet free aan het einde nog hoe groot de malloc was als ik de pointer in de tussentijd naar een tiental andere mallocs heb laten wijzen? Hoe gaat dit zowiezo? In mijn geval zijn alle mallocs even groot, maar wat als dat niet zo is?
M'n idee was dat de kernel aan gemallocceerde geheugenadressen knoopt wat de grootte was en dit ergens bij houd. Ik kan dit alleen nergens bevestigd vinden (en heb verder geen diepe kennis van kernels) en wil toch er zeker van zijn dat ik niet met een hele lading memory leaks zit aan het einde van het verhaal.
Voor de