title: .bss vs COMMON: what goes where?
body: <p>From my book:</p>
  
  <p>.bss:</p>
  
  <blockquote>
    <p>Uninitialized global C variables</p>
  </blockquote>
  
  <p>COMMON:</p>
  
  <blockquote>
    <p>Uninitalized data objects that are not yet allocated </p>
  </blockquote>
  
  <p>I have to say, I don't quite see a clear distinction. I don't even quite understand what an uninitizalied, non-allocated data object is...seems like nothing. I've used GNU's <code>readelf</code> tool to try to take a look at some simple C code, but can't find a single COMMON symbol. I've read things like FORTRAN's COMMON type is an example of a COMMON symbol - but I don't know FORTRAN</p>
  
  <p>Can someone possibly distinguish the two for me? If at all possible, hopefully with a C example? Greatly appreciated.</p>
  
  <p><strong>edit</strong>: from <a href="https://stackoverflow.com/questions/5443474/what-is-the-section-for-uninitialized-global-data">this</a> post, the variable c here:</p>
  
  <pre><code>int c;
  int main() {} ...
  </code></pre>
  
  <p>should be COMMON. But using <code>objdump -t</code> shows for me that c is in .bss...</p>
  
  <p><em>confused</em></p>