Alignment is something your compiler and linker will handle for you. It goes right back to the beginings of the 8086 processor family, and works like this:
Although memory is addressed by byte (every byte has a different address), the processor retrieves it by (at least) word. This was even true of the 8086, I think. If you have word-sized data sitting at an even address, a single word can be retrieved in a single read. If it's at an odd address, the processor needs to retrieve two words, the first to get the low byte of the word it's looking for, the next to get the high byte. This obviously slows things down enormously.
And yes, it's still an issue today. With caches and bits and pieces, the last time I tried this on a pentium, mucking about in assembler, I managed to get a piece of code to double in speed by inserting a nop! It was a question of shunting some data to be in alignment.
But you needn't go overboard about this. Compilers will align data and code as appropriate. In general, maloc-like functions in all languages return sensibly aligned addresses. Some people get worried about aligning to greater than a word (align to paragraph or whatever), but in virtually all applications that's excessive. If you waste memory too much you run a risk of cache misses instead, which are just as bad.