why Linux VmSize VmData is lager than estimation from code? : I want to know how many memory will take when the code is running.
I sum all memory used in my code and use gcc to convert to an executable bin file.
When I the bin file, and use cat /proc/$PID/status, the VmSize VmData is much larger than expected. Even if remove all code but only sleep, the result still is the same.

VmPeak:    12816 kB

VmSize:    12816 kB

VmLck:         0 kB

VmPin:         0 kB

VmHWM:       964 kB

VmRSS:       964 kB

VmData:      204 kB

VmStk:       136 kB

VmExe:        56 kB

VmLib:      2100 kB

VmPTE:        48 kB

VmPMD:        12 kB

VmSwap:        0 kB

 - Why the memory is so large even if no data is in my code? 
 - Why VmData is the same no matter I removed variables in code or not? Why not change smaller?
 - how to get memory my code is using exactly?