title: Why does CPU access memory on a word boundary?
body: <p>I heard a lot that data should be properly aligned in memory for better access efficiency. CPU access memory on a word boundary. </p>
  
  <p>So in the following scenario, the CPU has to make 2 memory accesses to get a single word. </p>
  
  <pre><code>Supposing: 1 word = 4 bytes
  
  ("|" stands for word boundary. "o" stands for byte boundary)
  
  
  |----o----o----o----|----o----o----o----|   (The word boundary in CPU's eye)
             ----o----o----o----              (What I want to read from memory)
  </code></pre>
  
  <p>Why should this happen? <strong>What's the root cause of the CPU can only read at the word boundary?</strong></p>
  
  <p>If the CPU can only access at the 4-byte word boundary, the address line should only need 30bit, not 32bit width. Cause the last 2bit are always 0 in CPU's eye.</p>
  
  <h2>ADD 1</h2>
  
  <p>And even more, if we admit that CPU must read at the word boundary, why can't <strong>the</strong> boundary start at where I want to read? It seems that the boundary is <strong>fixed</strong> in CPU's eye.</p>
  
  <h2>ADD 2</h2>
  
  <p>According to <em>AnT</em>, it seems that the boundary setting is hardwired and it is hardwired by the memory access hardware. CPU is just innocent as far as this is concerned.</p>