[TxMt] Is TM memory hog? 10MB text file makes TM use 564MB of RAM

Adam Strzelecki ono at java.pl
Tue May 20 13:34:29 UTC 2008


> So it seems tose 400MB that are freed are still kept by the OSX,  
> which is IMHO pretty lame behavior. I just wonder it there's any  
> kernel function to trigger VM flush/cleanup.
> Alternative solution I can see is writing own memory pool that uses  
> vm_allocate. Is this feasible Allan?

BTW. It is all about default OSX/libc allocator which keeps in the  
memory all blocks < 16KB, so they are not reclaimed at all (given back  
to the system).

But there's quite easy solution, alternative allocator ptmalloc (used  
by Linux glibc):
http://www.malloc.de/en/index.html

I've tested it with simple program:

> #include "stdio.h"
> #include "stdlib.h"
> #include "string.h"
>
> int main(int argc, char const *argv[])
> {
> 	char b[4*1024], c = 0;
> 	void *p[4*10*1024];
> 	size_t i, len = sizeof(b)/sizeof(b[0]);
> 	
> 	printf("Preparing buffer...\n");
> 	for(i = 0; i < sizeof(b)/sizeof(b[0]); ++i)
> 	{
> 		b[i] = c + 'a';
> 		c = (c + 1) % 30;
> 	}
>
> 	printf("Allocating...\n");
> 	for(i = 0; i < sizeof(p)/sizeof(p[0]); ++i)
> 	{
> 		p[i] = malloc(len);
> 		memcpy(p[i], b, len);
> 	}
> 	printf("Press any key...\n");
> 	getchar();
>
> 	printf("Freing...\n");
> 	for(i = 0; i < sizeof(p)/sizeof(p[0]); ++i)
> 		free(p[i]);
> 	printf("Press any key...\n");
> 	getchar();
>
> 	return 0;
> }


Without using libptmalloc3.a after freeing, it still uses 161 MB real  
memory with MALLOC_SMALL blocks.
With libptmalloc3.a after freeing, memory drops to 512KB! So this may  
be the solution for TextMate to give back small allocated memory  
blocks back to system.

Cheers,
-- 
Adam Strzelecki |: nanoant.com :|




More information about the textmate mailing list