Path: utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!ames!dftsrv!mimsy!chris From: chris@mimsy.UUCP (Chris Torek) Newsgroups: comp.lang.c Subject: Re: effect of free() Message-ID: <19493@mimsy.UUCP> Date: 9 Sep 89 15:09:39 GMT References: <319@cubmol.BIO.COLUMBIA.EDU> <3756@buengc.BU.EDU> <2065@munnari.oz.au> Organization: U of Maryland, Dept. of Computer Science, Coll. Pk., MD 20742 Lines: 20 In article <2065@munnari.oz.au> ok@cs.mu.oz.au (Richard O'Keefe) writes: >Can a capability-based machine support a C implementation at all? >Might that provide an example where a pointer can't be accessed as data >(thus making pointer-comparison-via-trapping-methods obligatory)? >What would that do to pointer subtraction, pointers in unions, and so on? Some Lisp machines implement pointers as triples. The code for `*p = 3', on such a machine, is (in pseudo-assembly) load reg1,p+8 | get index load reg2,p+4 | get size compare reg1,reg2 jltu ok | if (unsigned)index < size, is OK load reg1,<"invalid pointer reference"> jump runtime_error_abort ok: load reg2,p+0 | get array store #3,reg2[reg1] | array[index] = 3 -- In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7163) Domain: chris@mimsy.umd.edu Path: uunet!mimsy!chris