2013-01-17 2 views
1

Je développe une fonction dans le paquet C pour R et j'ai besoin d'initialiser le vecteur numérique R dans la mémoire allouée manuellement qui n'est pas récupérée.Comment placer des objets R dans la mémoire allouée manuellement?

La fonction standard allocVector (REALSXP, XXX) alloue de la mémoire pour moi et initialise l'objet. J'ai déjà un morceau de mémoire alloué, j'ai besoin d'initialiser l'objet R dans cette mémoire et de le renvoyer à l'espace utilisateur.

algorithme Je suis en train de suivre

  1. Allouer moi-même la mémoire (en fait il est une mémoire fichier mis en correspondance)

  2. Mettre un objet R (vecteur numérique norme R) dans cette mémoire (Comment?)

  3. Empêcher éboueur d'essayer de le récupérer (Comment?)

  4. Inscrivez-finaliseur pour cet objet

  5. Retour R utilisateur d'objet peut utiliser

  6. Obtenir une notification objet est pas plus référencé et liberer l'objet

Répondre

4

Votre problème commence par 1. comme Writing R Extensions manual vous dit (dans ses manières cryptiques, voir Section 5.9.2) que vous devez utiliser le «pool» de mémoire de R pour les objets que vous remettez à R. Comment R pourrait-il libérer la mémoire de l'objet s'il ne contrôle pas l'accès? A moins que vous n'utilisiez des pointeurs externes, qui sont également couverts (un peu) dans le même manuel, et d'autres endroits (d'autres questions ici, archives r-devel, plusieurs paquets, ...).

Et le package de R bigmemory à peu près couvre exactement cela (voir aussi le related bigmemory website. Vous pouvez, si vous êtes si incliné, commencez par BigMemory et d'en tirer un paquet « mmapmemory » de celui-ci. Oh, et il y a un paquet mmap mais peut-être que vous le saviez déjà

+0

alors je dois loin de pirater dans garbage collector R Mon colis n'a pas à être portable -.. il sera exécuté sur une instance dédiée R et matériel – user1987021

+0

n'est pas nécessaire portable est tout à fait Comme dirait Dirk, vous ne pouvez pas faire ce que vous voulez sans un piratage de fantaisie, est-ce possible, oui, quelqu'un va-t-il aller à la limite pour l'expliquer - sans doute pas, j'ai demandé, on m'a montré, et franchement je souhaite ne pas l'avoir vu ;-) Pour le compte rendu, je suis L'auteur de mmap pour R aussi. Bonne chance! –

Questions connexes