[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2000-12-12 (09:26) |
From: | Markus Mottl <mottl@m...> |
Subject: | fancy GC question |
Hello, I am not sure whether the following "trick" is really safe, but it seems to work: When I allocate an integer array in OCaml, which is always boxed, both the pointers to and the elements are obviously contiguous in memory. One could exploit this in C-interfaces under the restriction that the array is never changed by the OCaml-runtime, e.g.: int *ar = (int *) &Field(v_ar, 0); And then one can read/write directly into the integer array without having to follow an indirection (an intermediate pointer) by treating "ar" as a normal C array. But is this really always safe if only C writes to the array? What about e.g. heap compactions and other GC-actions? Can other effects mess up the fact that the pointers map continuously on a contiguous chunk of memory (of integers)? If yes, this would, of course, require the traditional use of the "Field"-macro for every access. Otherwise, one could squeeze out a bit more performance in some (probably rare) cases. - Markus Mottl -- Markus Mottl, mottl@miss.wu-wien.ac.at, http://miss.wu-wien.ac.at/~mottl