diff --git a/elfio/elfio.hpp b/elfio/elfio.hpp
index c983a9e8da5f84e01fb8615a7dbd0530aea81e2a..63512b35711ea60116239b929e9799a3217202c4 100644
--- a/elfio/elfio.hpp
+++ b/elfio/elfio.hpp
@@ -728,7 +728,15 @@ class elfio
             }
 
             seg->set_file_size( segment_filesize );
-            seg->set_memory_size( segment_memory );
+
+            // If we already have a memory size from loading an elf file (value > 0),
+            // it must not shrink!
+            // Memory size may be bigger than file size and it is the loader's job to do something
+            // with the surplus bytes in memory, like initializing them with a defined value.
+            if ( seg->get_memory_size() < segment_memory ) {
+                seg->set_memory_size( segment_memory );
+            }
+
             seg->set_offset(seg_start_pos);
         }