2013-05-27 6 views
0

Est-ce que quelque chose:Comment contraindre malloc à une région spécifique de la mémoire

  • Alloue/Libère/réalloue beaucoup d'objets de taille variable sans fragmentation (essentiellement ce que malloc fait) et
  • garde la trace de toute la mémoire pages utilisées dans ces allocations afin que je puisse
  • plus tard mprotect toutes ces pages pour les rendre en lecture seule
  • de préférence sans verrouillage - tous les accès sera mono-thread
  • qui fonctionne sur Linux et OS X, de préférence avec quelque chose d'équivalent sur Windows?

Je ne peux pas penser à un moyen de le faire avec les fonctions d'allocation de mémoire standard. La seule stratégie qui vient à l'esprit est l'utilisation d'un pool de mémoire personnalisé au lieu de malloc. Donc ma question est: est-il un moyen de le faire sans une coutume malloc ou (s'il n'y a pas) des suggestions sur quoi utiliser?

je pouvais envelopper malloc et garder une trace de toutes les pages qu'il a utilisé assez facilement comment puis-je vous garantis qu'une fois que je l'ai appelé mprotect sur ces pages malloc ne pas essayer d'utiliser la mémoire qui est « pris », soit avant le début ou après la fin d'un bloc alloué dans l'une des pages affectées?

+0

que voulez-vous dire par "plus tard"? après le processus se termine? Voulez-vous vraiment dire "pages" (mémoire virtuelle) ou "cadres" (mémoire physique)? – Elazar

+0

Avez-vous seulement besoin d'allouer de la mémoire? Ou encore pour le désaffecter? Et quelle est votre utilisation? – thejh

+0

malloc normal ne fonctionnera pas par ex. car pour les petites allocations, les pages sont partagées entre plusieurs choses allouées en utilisant malloc – thejh

Répondre

1

L'Open Source Memory Pool System allouera de la mémoire dans les blocs de la taille d'une page du système d'exploitation que le MPS ne touche pas lui-même. Vous pouvez mprotect ces pages si vous le souhaitez et être certain qu'elles ne seront pas touchées par l'allocateur lui-même (qui conserve toutes ses structures de données ailleurs) ou par tout autre pool de mémoire. Si vous utilisez la classe de pool MVT, vous pouvez également profiter du inline lockless allocation. Linux, Mac OS X, and Windows are supported. Clause de non-responsabilité: Je suis l'architecte de la société MPS.

+1

Merci pour la suggestion, mais je ne pouvais pas utiliser cela en raison des restrictions de licence. À la fin, j'ai décidé d'utiliser l'une des implémentations de malloc librement disponibles (dlmalloc). – Ramon

+0

Bonne chance, mais avez-vous remarqué "Si les conditions de licence ne vous conviennent pas (par exemple, vous développez un produit commercial à code source fermé ou un système d'exécution de compilateur ), vous pouvez facilement sous licence le MPS sous différents termes de Ravenbrook. " – rptb1

Questions connexes