Cela dépend entièrement de l'implémentation de malloc
. Il n'y a aucune raison inhérente pour laquelle une implémentation particulière de malloc
introduirait de la non-déterminisme (sauf éventuellement comme test d'application, mais même alors, cela devrait être désactivé par défaut). Par exemple, le malloc de Doug Lea n'utilise pas rand(3)
ou des méthodes similaires dans celui-ci.
Mais, comme malloc
fait des appels au noyau tels que sbrk(2)
ou mmap(2)
sur Linux ou VirtualAlloc
sur Windows, ces appels système peuvent parfois ne pas être déterministes, même dans des processus par ailleurs identiques. Le noyau peut décider de fournir intentionnellement des adresses mmap
différentes dans différents processus pour une raison quelconque.
Donc, pour de petites allocations, qui sont généralement traitées dans l'espace utilisateur sans appel système, il est très probable que les pointeurs résultants seront les mêmes après un fork()
; de grandes allocations qui sont traitées par un appel système peuvent être les mêmes.
En général, cependant, ne comptez pas dessus. Si vous avez vraiment besoin de pointeurs identiques dans des processus séparés, créez-les avant de les bifurquer, ou utilisez la mémoire partagée et partagez-les de manière appropriée.