8 bool vs 1 int

Luc*_*ima 0 c++ sizeof

A bool在C++中占用1个字节.但是,为什么bool[8]需要8个字节而不是1个字节?一个字节有足够的空间容纳8位.

我使用-Os标志用GCC编译了这个:

#include <iostream>

using namespace std;

class Foo
{
    public:
        bool m_bool[8];
};

int main ()
{
    cout << "Size: " << sizeof(Foo) << " byte(s) " << endl;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

它返回"Size:8 byte(s)".

有没有办法优化它?

use*_*430 6

编译器必须允许你获取各个bool的地址,例如

Foo foo;
bool* p = &foo.m_bool[0];
bool* q = &foo.m_bool[1];
Run Code Online (Sandbox Code Playgroud)

如果bool被包装了p和q会是什么?