MIPS 架构填充
MIPS architecture padding
在 MIPS 架构中,数据类型如何在堆栈中分配?
如果我有 2 个 char 和 1 个 int 数据,堆栈是以 8 字节形式分配它们(2 个字符在同一内存段中,1 个 int 在另一个内存段中)还是 12 字节形式(每个字符的内存段和 1 个内存段为 int)?我正在尝试了解 32 位 MIPS 架构。
对于这个问题,分配的数据类型是用于局部变量还是用于参数传递很重要。
对于本地人,只要 int
在 4 字节边界上对齐,您就可以分配任何您想要的东西。总堆栈分配被四舍五入到 8 字节(尽管有些人对此并不在意,例如家庭作业,并且只有在您的函数调用可能依赖于堆栈预期 8 字节对齐的其他函数时才绝对必要。)
对于参数,您应该遵循记录在案的调用约定 — 有多个调用约定,因此您必须知道您正在使用哪个。请参阅 here 以查看其中的一些内容;查找“MIPS EABI 32 位调用约定”and/vs。 “MIPS O32 32 位调用约定”。
它们的共同点是前四个参数是在寄存器中传递的,这实际上意味着 char
s 取一个完整的 32 位字; char
在堆栈上传递的参数也遵循这种形式,因此每个参数都取一个完整的 32 位字。
在 MIPS 架构中,数据类型如何在堆栈中分配? 如果我有 2 个 char 和 1 个 int 数据,堆栈是以 8 字节形式分配它们(2 个字符在同一内存段中,1 个 int 在另一个内存段中)还是 12 字节形式(每个字符的内存段和 1 个内存段为 int)?我正在尝试了解 32 位 MIPS 架构。
对于这个问题,分配的数据类型是用于局部变量还是用于参数传递很重要。
对于本地人,只要 int
在 4 字节边界上对齐,您就可以分配任何您想要的东西。总堆栈分配被四舍五入到 8 字节(尽管有些人对此并不在意,例如家庭作业,并且只有在您的函数调用可能依赖于堆栈预期 8 字节对齐的其他函数时才绝对必要。)
对于参数,您应该遵循记录在案的调用约定 — 有多个调用约定,因此您必须知道您正在使用哪个。请参阅 here 以查看其中的一些内容;查找“MIPS EABI 32 位调用约定”and/vs。 “MIPS O32 32 位调用约定”。
它们的共同点是前四个参数是在寄存器中传递的,这实际上意味着 char
s 取一个完整的 32 位字; char
在堆栈上传递的参数也遵循这种形式,因此每个参数都取一个完整的 32 位字。