以下のコードはApple LLVM version 6.1.0 (clang-602.0.53)で8と12を出力します。
ですが、intは4byte、boolは1byteなのでStは5byte、StStは6byteしか使わないため、サイズが増えてしまっています。

#include "stdio.h"

struct St{
	int a;
	bool flag;
	};

struct StSt{
	S s;
	bool f;
};

int main(void) {
	printf("%lu\n", sizeof(St));
	printf("%lu\n", sizeof(StSt));
	return 0;
}

原因

Cでは構造体の後ろにパディングを追加できるようになっています。
6.7.2.1 Structure and union specifiers

13 Within a structure object, the non-bit-field members and the units in which bit-fields
reside have addresses that increase in the order in which they are declared. A pointer to a
structure object, suitably converted, points to its initial member (or if that member is a
bit-field, then to the unit in which it resides), and vice versa. There may be unnamed
padding within a structure object, but not at its beginning.

そのため、sizeofがパディングを含めた値を返し、変数の合計とは違った値を返してきます。
このように、Cの構造体の大きさはではメンバの合計とは違うため、ちゃんとsizeofを使って計算しないと大変な事になります。1

参考資料

このエントリーをはてなブックマークに追加