Data segments:
Immediately above the text segment is the data segment, which is the place where the process holds the program's global and static variables (data). Actually, it's not one mapping (segment); the data segment consists of three distinct mappings. In order from the low address, it consists of: the initialized data segment, the uninitialized data segment, and the heap segment. We understand that, in a C program, uninitialized global and static variables are automatically initialized to zero. What about initialized globals? The initialized data segment is the region of address space where explicitly initialized global and static variables are stored. The uninitialized data segment is the region of address space where, 7 course, uninitialized globals and static variables reside. The key point: these are implicitly initialized to zero (they're actually memset to zero). Also, older literature often refers to this region as the BSS. BSS is an old assembler directive - Block Started by Symbol - that can be ignored; today, the BSS region or segment is nothing but the uninitialized data segment of the process
Fonte:
[1] Hands-On System Programming with Linux: Explore Linux system programming, Kaiwan N Billimoria