title: Why is int_fast16_t 64 bits on a 64-bit system?
body: <p>I looked inside the header file <code>&lt;stdint.h&gt;</code> on my implementation. I see the following: </p>
  
  <pre><code>typedef long int int_fast16_t;
  typedef long int int_fast32_t;
  typedef long int int_fast64_t;
  </code></pre>
  
  <p>I have a 64-bit system, so a long int occupies 64 bits. Why are all three data types typedefed as being long ints? I understand the case of the int_fast64_t, which is 64 bits. But why are the 16 and 32-bit data types having 64 bits? Is this some kind of error? I created a small program to check if this is the case:</p>
  
  <pre><code>sizeof(int_fast8_t) : 1
  sizeof(int_fast16_t) : 8
  sizeof(int_fast32_t) : 8
  sizeof(int_fast64_t) : 8
  </code></pre>
  
  <p>Are the sizes of these data types implementation defined? What features or characteristics defines a data type as being "fast"? Is it the speed that chunks of data get loaded from the RAM to the CPU? If <code>int_fast16_t</code> and <code>int_fast32_t</code> are 8 bytes wide, what are the benefits in performance? Is it really faster to access a 64-bit data type on a <strong>64-bit system</strong>?</p>