> Sorry for the delay. Medical problem. > > Here's what I know. > > 1) Under FreeBSD 8.x OBJC APPEARS NOT to use garbage collection. I > looked at the source and the GC routines aren't defined anywhere and I > stepped through the assembly language and the allocation routing call > malloc(). There is a specific conditional in the FreeBSD compiler that > cloosed malloc() or GC_malloc() depending on whether a GC variable is > defined. > > 2) Even through you can specify -fobjc-gc on a compile line using the > FreeBSD compiler, it appears there is no warning issued if GC is not > enabled. > > 3) GCC 45 in the ports directory DOES NOT include OBJC. Neither does 44. > > 4) I downloaded GCC and compiled it this way: > > ../gcc-4.4.3/configure --disable-nls --disable-rpath > --prefix=/usr/local/gcc44 --with-system-zlib --enable-languages="c,c > ++,objc" --enable-objc-gc > > I compiled an ObjC program this way: > > /usr/local/gcc44/bin/gcc -fobjc-gc -g -O prog.m -lobjc_gc -static > -pthread > > I checked and the GC routines are in there. > > I have a Core2 Quad, 8GB of RAM, and 32 GB of swap. I ran "a" program > (below). No swap activity. No swap consumption. No increase in memory > consumption. Five minutes. It hasn't crashed. > > YMMV > > > #include <sys/types.h> > #import <objc/Object.h> > > int main(int argc, const char *argv[]) { > while (1) { > Object *obj = [[Object alloc] init]; > u_int h = [obj hash]; > } > return 0; > } >
Wow thanks, that really helps. I now understand more about how this stuff works. I'm kind of new to C programming in general, and library linking and all that sort of stuff. My gcc command is like this now: /usr/opt/gcc44/bin/gcc -o main Main.m MyObj.m -lobjc_gc -lpthread -static The "-static" is nice because my libobjc_gc.so is in a non-standard location on my system, namely /usr/opt/gcc44/lib/ , and so I don't have to specify LD_LIBRARY_PATH if I compile with "-static" (but as a result the binary is larger and takes more memory to run, by about 700 kilobytes). The "-lpthread" is necessary because pthreads are used as part of the garbage collection process. The "-lobjc_gc" is used instead of "-lobjc" to enable garbage collection. I compiled gcc 4.4.3 (downloaded directly from links on gcc.gnu.org) myself (not from ports), with ./configure --prefix=/usr/opt/gcc44 --enable-objc-gc -enable-languages="c,c++,objc" My source code looks like this: Main.m --------------------- #import <pthread.h> #import "MyObj.h" int main(int argc, const char *argv[]) { while (YES) { MyObj *obj = [[MyObj alloc] init]; [obj hash]; } return 0; } MyObj.h ---------------------- #import <objc/Object.h> @interface MyObj : Object {} @end MyObj.m ---------------- #import "MyObj.h" @implementation MyObj @end I get no memory increases in my program. I have not tried to get garbage collection to work with GNUstep yet. It very well may not work, because the garbage collection is probably tied to objc_gc (for example instead of gnustep-base or gnustep-runtime or something like that). Like I said I don't know too much about C programming at this point. I do see a libgnustep-base.so in my GNUstep installation, but I don't see anything of the form *_gc.so. I'm going to write some programs just using Object, not using GNUstep at this point. I think I'll wait until I get an Apple and an iPhone before I try to use the other object classes (NSObject and friends). _______________________________________________ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"