浏览代码

Don't use GC heap for bbMemAlloc() data.

woollybah 10 年之前
父节点
当前提交
84807546f9
共有 4 个文件被更改,包括 19 次插入4 次删除
  1. 9 0
      blitz.mod/blitz.bmx
  2. 5 1
      blitz.mod/blitz_gc.c
  3. 1 0
      blitz.mod/blitz_gc.h
  4. 4 3
      blitz.mod/blitz_memory.c

+ 9 - 0
blitz.mod/blitz.bmx

@@ -405,6 +405,15 @@ suspended due to #GCSuspend.
 End Rem
 Function GCCollect:Int()="bbGCCollect"
 
+Rem
+bbdoc: Run garbage collector, collecting a little
+returns: Returns 0 if there is no more to collect.
+about:
+This function will have no effect if the garbage collector has been
+suspended due to #GCSuspend.
+End Rem
+Function GCCollectALittle:Int()="bbGCCollectAlittle"
+
 Rem
 bbdoc: Memory allocated by application
 returns: The amount of memory, in bytes, currently allocated by the application

+ 5 - 1
blitz.mod/blitz_gc.c

@@ -95,13 +95,17 @@ void bbGCFree( BBGCMem *q ){
 }
 
 int bbGCValidate( void *q ){
-	return GC_base( q )==q;
+	return GC_is_heap_ptr( q );
 }
 
 int bbGCCollect(){
 	GC_gcollect();
 }
 
+int bbGCCollectALittle() {
+	return GC_collect_a_little();
+}
+
 void bbGCSetMode( int mode ){
 }
 

+ 1 - 0
blitz.mod/blitz_gc.h

@@ -53,6 +53,7 @@ BBObject*	bbGCAllocObject( int size,BBClass *clas,int flags );
 int 		bbGCValidate( void *p );
 int		bbGCMemAlloced();
 int		bbGCCollect();
+int     bbGCCollectALittle();
 void		bbGCSuspend();
 void		bbGCResume();
 void		bbGCRetain( BBObject *p );

+ 4 - 3
blitz.mod/blitz_memory.c

@@ -12,14 +12,15 @@
 void *bbMemAlloc( size_t size ){
 	void *p;
 	
-	//p=malloc( size );
-	p=GC_MALLOC_ATOMIC_UNCOLLECTABLE( size );
+	p=malloc( size );
+	//p=GC_MALLOC_ATOMIC_UNCOLLECTABLE( size );
 	return p;
 	
 }
 
 void bbMemFree( void *p ){
-	if( p ) GC_free( p );
+	//if( p ) GC_free( p );
+	if ( p ) free(p);
 }
 
 void *bbMemExtend( void *mem,size_t size,size_t new_size ){