 <p>I'd strongly recommend using the C99 <code>&lt;stdint.h&gt;</code> header. It declares <code>int32_t</code>, <code>int64_t</code>, <code>uint32_t</code>, and <code>uint64_t</code>, which look like what you really want to use.</p> <p>EDIT: As Alok points out, <code>int_fast32_t</code>, <code>int_fast64_t</code>, etc. are probably what you want to use. The number of bits you specify should be the minimum you need for the math to work, i.e. for the calculation to not "roll over".</p> <p>The optimization comes from the fact that the CPU doesn't have to waste cycles realigning data, padding the leading bits on a read, and doing a read-modify-write on a write. Truth is, a lot of processors (such as recent x86s) have hardware in the CPU that optimizes these access pretty well (at least the padding and read-modify-write parts), since they're so common and usually only involve transfers between the processor and cache.</p> <p>So the only thing left for you to do is make sure the accesses are aligned: take <code>sizeof(int_fast32_t)</code> or whatever and use it to make sure your buffer pointers are aligned to that.</p> <p>Truth is, this may not amount to that much improvement (due to the hardware optimizing transfers at runtime anyway), so writing something and timing it may be the only way to be sure. Also, if you're really crazy about performance, you may need to look at SSE or AltiVec or whatever vectorization tech your processor has, since that will outperform anything you can write that is portable when doing vectored math.</p>