<p>For example, if I declare a long variable, can I assume it will always be aligned on a "sizeof(long)" boundary? Microsoft Visual C++ online help says so, but is it standard behavior?</p>

<p>some more info:</p>

<p>a. It is possible to explicitely create a misaligned integer (*bar):</p>

<blockquote>
  <p>char foo[5]</p>
  
  <p>int * bar = (int *)(&amp;foo[1]);</p>
</blockquote>

<p>b. Apparently, #pragma pack() only affects structures, classes, and unions.</p>

<p>c. MSVC documentation states that POD types are aligned to their respective sizes (but is it always or by default, and is it standard behavior, I don't know)</p>

Yes, all types are always aligned to at least their alignment requirements.
How could it be otherwise?
But note that the sizeof() a type is not the same as it's alignment.
You can use the following macro to determine the alignment requirements of a type:
```
```
#define ALIGNMENT_OF( t ) offsetof( struct { char x; t test; }, test )
```
```