2012-10-22 43 views
1

这几天我正在阅读关于堆栈溢出的文档,并发现一个句子让我困惑。C上的局部变量存储在内存中

推送到堆栈上的项目可以,顺便说一句,只能放在字边界, 这意味着地址必须是字长的倍数。因此,如果程序 包含仅使用一个字节的局部变量,则尽管如此,仍使用一个完整的字来存储 这个变量!

这是否意味着存储在32位机器堆栈中的短整型(2字节)局部变量将浪费2个字节,因为系统将分配一个完整的单词来存储?

回答

4

是的,就是这个意思。这取决于系统的实施和处理实施,但它有相当常见的字对齐。

+0

那么这意味着我们不能通过使用小于32位的数据类型来节省空间? – JustForTest

+0

@JustForTest取决于你的系统,在许多情况下 - 是的,这就是它的意思。尽管可以使用“打包”结构,但在直接访问这些数据时要小心。 – littleadv

相关问题