Malloc in D
Marcin
m_zap at o2.pl
Fri Apr 27 02:05:08 PDT 2012
Hi!
I find code:
[code]
import c.stdlib;
import c.stdlib;
import std.outofmemory;
class Foo{
static void[] buffer;
static int bufindex;
static const int bufsize = 100;
static this(){
void *p;
p = malloc(bufsize);
if (!p)
throw new OutOfMemory;
gc.addRange(p, p + bufsize);
buffer = p[0 .. bufsize];
}
static ~this(){
if (buffer.length){
gc.removeRange(buffer);
free(buffer);
buffer = null;
}
}
new(uint sz){
void *p;
p = &buffer[bufindex];
bufindex += sz;
if (bufindex > buffer.length)
throw new OutOfMemory;
return p;
}
delete(void* p){
assert(0);
}
static int mark(){
return bufindex;
}
static void release(int i){
bufindex = i;
}
}
void test(){
int m = Foo.mark();
Foo f1 = new Foo; // allocate
Foo f2 = new Foo; // allocate
Foo.release(m); // deallocate f1 and f2
}
[/code]
When I try compile i have some error:[code]
vander at vander-VirtualBox:~/Pulpit/D$ gdc Memory.d -o Memory
Memory.d:1: Error: module stdlib is in file 'c/stdlib.d' which
cannot be read
import path[0] =
/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.4.5/../../../../../include/d/4.4.5/i686-linux-gnu
import path[1] =
/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.4.5/../../../../../include/d/4.4.5
vander at vander-VirtualBox:~/Pulpit/D$[/code]
When i comment import c.stdlib;
I have error
[code]
vander at vander-VirtualBox:~/Pulpit/D$ gdc Memory.d -o Memory
Memory.d:11: Error: undefined identifier malloc
Memory.d:11: Error: function expected before (), not __error of
type _error_
Memory.d:13: Error: identifier 'OutOfMemory' is not defined
Memory.d:13: Error: OutOfMemory is used as a type
Memory.d:13: Error: new can only create structs, dynamic arrays
or class objects, not void's
Memory.d:13: Error: can only throw class objects, not type void*
Memory.d:14: Error: undefined identifier gc, did you mean static
import gcc?
Error: no property 'addRange' for type 'TOK149'
Memory.d:14: Error: function expected before (), not __error of
type TOK149
Memory.d:19: Error: undefined identifier gc, did you mean static
import gcc?
Error: no property 'removeRange' for type 'TOK149'
Memory.d:19: Error: function expected before (), not __error of
type TOK149
Memory.d:20: Error: undefined identifier free, did you mean
function fread?
Memory.d:20: Error: function expected before (), not __error of
type _error_
Memory.d:29: Error: identifier 'OutOfMemory' is not defined
Memory.d:29: Error: OutOfMemory is used as a type
Memory.d:29: Error: new can only create structs, dynamic arrays
or class objects, not void's
Memory.d:29: Error: can only throw class objects, not type void*
vander at vander-VirtualBox:~/Pulpit/D$
[/code]
What's can be wrong?
More information about the Digitalmars-d-learn
mailing list