Another of the per-process limits set with setrlimit or ulimit -d, RLIMIT_DATA restricts how much memory a process can use for its data: its initialized and uninitialized variables and the heap that grows when the program asks for more memory. Since Linux 4.7 the limit also applies to some private memory mappings created with mmap, so it constrains more than it used to.
It is narrower than RLIMIT_AS, which covers the entire address space, so it is sometimes chosen when a limit on address space would break a program that maps large files or libraries. It still counts what the program has reserved and not what is physically in use.
As with other limits, the effect when it is reached is that further memory allocations fail. Well-written software handles this and returns an error, while poorly handled failures can crash the process.
Vendors sometimes suggest limits like this as temporary protection for a memory bug. They reduce what an exploit can do but they do not remove the flaw, so plan to patch.