Heap memory limit?

bearophile bearophileHUGS at lycos.com
Tue Feb 23 08:41:31 PST 2010


Steven Schveighoffer:

>Also, however, C's malloc isn't as likely to explode memory usage because items should be freed when they are no longer used.<

Of course , if we assume perfect programmers, then there's no need of many other kinds of safeties present in D code.


> Again, this can be done in the GC code itself, it does not need to be a  
> compiler-defined limit.  My preference is for the default to be unlimited,  
> since this is the most common case.

This is wrong; in the most common case you don't want a program to trash your virtual memory and crash your other programs. Only for special programs you want no limits.

I am now slowly starting to understand why new languages (Java, C# and all the ones created on dotnet and JVM) are designed the other way around compared to D: they start from a safe situation and then add (usually safe) optimizations to try to become faster. Because starting from C you have no hope of improving certain things (some of such things are limits in the brain of people used to C).

Thank you for your answers and explanations, I can see there's no use of the limit I was talking about. Better to put an external limit to the program, as Lars Kyllingstad has shown, or maybe to add a memory limit to the GC, that can defined at run-time.

--------------

Justin Johansson:

>Can you please explain why you think this is useful?<

To make D programs a bit safer. On Windows if you have 5 programs running, and one of them eats too much RAM, the system starts swapping, everything starts running very slowly, some other programs crash, etc. This is not nice. So if I write a small buggy program to process a large amount of genomic data I'd like a bug in my code to avoid that out of memory situation. But Steven Schveighoffer has just explained why my idea can't work in D. So sorry for all the noise :-)


>Assuming the idea is useful, why would you have to be a compiler option rather than, say, a linker option?<

I don't care of linkers. They are an implementation detail that in a modern language I want to be able to ignore in most times, unless I'm doing something special (and the situation I am discussing here is not special at all, I think of it as the default one). To use a car designed in 2008 I don't want to do all the things you have to do to start a car designed in 1940 :-) I want it to work in a simpler way, even if inside it's probably more complex.

Bye,
bearophile



More information about the Digitalmars-d mailing list