Когато дадох примера не бях особено сериозен, обаче сега съм сериозен - да, причината е че alignment-а на стека е
8 16 байта и не - нямаме припокриване на регионите памет. Причината е че единствено съдържанието на _dst[4] се намира в стека, останалите две - *_src и *_dst2 са инициализирани и съответно са указатели към памет в rodata. Копирането на памет става от адреса rodata върху стека и няма припокриване, т.е strcpy се ползва напълно правилно и върху 32 и върху 64-битова система.
Всъщност забавно е защо компилирано с gcc не гърми на 64-битова машина, а гърми на 32-битова. Платформено/компилаторно-зависимо е, да

Който не е чел този коментар преди да го редактирам, може да се пробва да познае

Всъщност няма значение, защото сметките бяха малко сбъркани, така че и да сте го прочели, няма значение. Всъщност за да е по-забавно внесох една подсказка, ама няма да кажа къде

П.П. теорията се чупи тук:
char *_src="1234"; // Не гръмва (е вярно печата глупости за _dst2) :-) при положение че 5 байта препълват масив за 4 байта...
Ако беше така, щеше да помажеш dst2 с един нулев байт в началото и тъй като е null-terminated низ, нямаше да го печата просто, вместо да печата глупости

Пък и казах че dst2 е в rodata, там при най-добро желание не можеш да презаписваш памет (пробвай примерно dst2[0]='a'; да видиш какво ще се случи). Друго е