当我的程序启动时,堆栈是否与 4 字节边界对齐?

Is the stack aligned to a 4 bytes boundary when my program starts?

我想确保我的变量正确对齐。所以我有以下问题:

在 32 位系统上,传递给程序入口点的 ESP 是 4 字节对齐的。在 64 位系统上,它是 8 字节对齐的。这是由程序 loading/startup 逻辑保证的,它将这样一个对齐的 ESP 传递到您的入口点。

一旦您的程序开始执行,所有函数(库、OS 调用以及您将编码的函数)都希望保留这种对齐方式,并且几乎没有代码会违反它。 (原因之一:未对齐的堆栈充其量意味着未对齐的访问,这会减慢您的程序。)