On Tue, Jul 09, 2019 at 10:24:53AM -0700, Graham Percival wrote: > On Tue, Jul 09, 2019 at 07:17:39AM +0200, Martin Husemann wrote: > > The classical "data segment" (limited by RLIMIT_DATA) is not used much > > nowadays in NetBSD. Especially malloc() does not use it. > > > > RLIMIT_DATA The maximum size (in bytes) of the data segment for a > > process; this defines how far a program may extend its > > break with the sbrk(2) system call. > > > > > > In ancient times malloc allocated memory via sbrk(2), but nowadays it uses > > mmap(2) with anonymous memory. > > I have no complaint about the internal implementation of malloc(). But POSIX > says that: > > RLIMIT_DATA > This is the maximum size of a data segment of the process, in bytes. If
I think you don't grasp what Martin's telling you. POSIX does not precisely define "data segment of the process"; nor does it state that there cannot be more than one. Our implementation doesn't really have such; so, though it might be desirable to ensure a process cannot allocate more than RLIMIT_DATA bytes, it is not a violation that it cannot, so long as said allocations don't come from a single "data segment of the process" (which in our implementation they do not). The concept of a process having a single "data segment" managed with sbrk() is very old and is not really relevant to modern Unix implementations. If POSIX wants to redefine RLIMIT_DATA in some way more useful in the modern era, this might be good; but as it stands, the problem is that the limit is enforced, but it does not, perhaps, limit what many users initially think it ought to. Thor