From tlumley at u.washington.edu  Tue Apr 13 16:40:33 2004
From: tlumley at u.washington.edu (Thomas Lumley)
Date: Tue Apr 13 16:40:38 2004
Subject: [Rd] shared mem advice
In-Reply-To: <20040413143501.48691.qmail@web60106.mail.yahoo.com>
References: <20040413143501.48691.qmail@web60106.mail.yahoo.com>
Message-ID: <Pine.A41.4.58.0404130737530.106200@homer38.u.washington.edu>

On Tue, 13 Apr 2004, Alex Nu wrote:

>
>  Hi,
>
>  I want to write a package where I would use
>  shared memory for some vectors
>
>  Any suggestion is appreciated...

I'd recommend looking at external pointer objects.  If the developer
webpage were working, that would be the place to look. I'm not sure where
else there is information.

>
>  I wonder if the right approach would be to
>  modify add a modified version of the
>
>  allocVector(SEXPTYPE type, int length) function
>
>  specifically
>
>  shared_mem_id = shmget(shared_mem_key,
>                         SHM_SIZE,
>                         IPC_CREAT);
>
>  shared = (SEXP) shmat(shared_mem_id, (void *)0, 0);

No, you want the shared memory to hold the data of the vector, not the
header record that the SEXP points to.  If you do it this way you want to
look at how memory.c:allocVector uses malloc() for large vectors.

	-thomas

>
>  my_allocVector(SEXPTYPE type, int length, SEXP
>                 shared) {
>
>  SEXP s=shared;
>  ....
>
>  And erase this if:
>
> #################################################
>  if(size >=
>     (LONG_MAX / sizeof(VECREC))-sizeof(SEXPREC_ALIGN)
>      ||
>     (s =
>     malloc(sizeof(SEXPREC_ALIGN) + size *
>            sizeof(VECREC))
>    )
>     == NULL) { {
> #################################################
>
>  Alex
>
> ______________________________________________
> R-devel@stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-devel
>

Thomas Lumley			Assoc. Professor, Biostatistics
tlumley@u.washington.edu	University of Washington, Seattle


[Rd] shared mem advice
Thomas Lumley