I have noticed many times whilst disassembling executables that often the compiler will produce jumps to other unconditional jumps, rather than simply jumping to the final destination. For example:
Notice instead of
jmp 0x100001634 it would have written
jmp 0x100001681 and skipped the two other jumps in between. Is there a particular reason for not doing so?