C – Qu’est-ce que free () fait à la mémoire?

J’ai recodé malloc() free() et realloc() .

J’ai une liste chaînée avec les pointeurs renvoyés par malloc() .

La question est: qu’est-ce que free() vraiment?

Actuellement, j’ai fait un memset() pour avoir le même comportement de free() .

Mais était-il préférable de définir un indicateur dans ma liste comme étant ‘est libre’ plutôt que de faire un memset() afin de le rendre plus rapide?

Généralement free (3) ne fait rien à la mémoire elle-même. (Si la sécurité ou la confidentialité est une préoccupation, vous devez effacer la mémoire avant de la libérer.)

Si vous souhaitez implémenter malloc, vous devez disposer d’une firebase database de blocs de mémoire libres. Lorsque la mémoire est libérée, vous devez la joindre à la mémoire libre adjointe, le cas échéant. Si une page complète finit par être inutilisée, vous devez dire au kernel que vous n’en avez plus besoin (en fonction de la façon dont vous avez obtenu cette mémoire)

La fonction de bibliothèque C void free(void *ptr) libère la mémoire allouée précédemment par un appel à calloc , malloc ou realloc .

Vous devriez l’utiliser pour éviter les memory leaks.

Libre: Call dissociera / annulera l’allocation de la mémoire pointée par un pointeur afin qu’un autre processus puisse l’utiliser.

Memset: Call établira une mémoire / remplira un emplacement de mémoire. Elle ne dissociera / annulera pas la mémoire et la mémoire restra allouée / occupée tant que le programme n’existera pas. Ce qui peut causer des memory leaks.

Vous pouvez utiliser l’outil valgrind pour vérifier les memory leaks.

Et il est préférable de dissocier / dé-allouer une mémoire si elle n’est pas requirejse.