title: How does MASM .DATA? directive work internally
body: <p>In Kip Irvines book I came across the following :</p>
  <p>The .DATA? directive declares uninitialized data. When defining a large block of uninitialized data, the .DATA? directive reduces the size of a compiled program. For example, the followingcode is declared efficiently:</p>
  <blockquote>
  <p>.data?</p>
  <p>bigArray DWORD 5000 DUP(?) ; 20,000 bytes, not initialized</p>
  </blockquote>
  <p>The following code, on the other hand, produces a compiled program 20,000 bytes <strong>larger</strong>:</p>
  <blockquote>
  <p>.data</p>
  <p>bigArray DWORD 5000 DUP(?) ; 20,000 bytes</p>
  </blockquote>
  <p>What exactly is the .data? directive doing under the hood in the above example to make the program 20k smaller.</p>