问题
- gcc编译器会做很多优化, c++规范规定空对象大小不能为0, sizeof返回值也必须大于0
- gcc中对空对象强制保留1byte
- 那么, 空对象构成的数组会做优化吗?
验证
1 | struct Empty {}; |
- 只有非叶子函数才会真的执行开辟栈空间, 我们使用 一个空调用把使用栈的函数强转为非叶子函数
- 可以看到
Empty arr[100]
分配了112个byte, 说明这里确实没有做处理, 不过也是合理的 - 至于为啥是112, 这就是涉及栈对齐了,对比下面这个函数就知道了
1 | void test() { |