There is an overhead with each object in FlatBuffers. There you put into the same table or vector (aka array), and the more of the same type to avoid padding overhead, the more more efficient the buffer will be. This is sort of the same as overhead in C memory structures although FlatBuffers has a bit more overhead to deal with versioning etc.
It has been a long time since I looked at Cap'n Proto, but as I recall, it works largely the same as FlatBuffers in memory layout, except it doesn't use vtables to decide which members of a table is present, so it stores all members, even if they are zero / null values. Instead, Cap'n Proto offers to compress runs of zero values such that the end result takes up less space, but I think it needs to do a fast decompression step before reading, and I think this compression is optional.
FlatBuffers sort of has compression via vtables, but it is mostly visible when you only use a few among many fields present.
FlatBuffers does require the buffer to be aligned, so if you read it from a sufficiently aligned memory position, you should be safe. If you do not care (as on Intel platforms), you can get away with unaligned memory, but if you choose to verify the buffer, you probably will get an alignment error.
Now, you can also just compress the buffer with gzip, zstd, og lz4 compression, as examples, but that is outside of FlatBuffers per se.
It has earlier been shown, that JSON compresses better than FlatBuffers for large datasets, and FlatBuffers better than JSON for small data sets. This has to do with the use of offsets (relative pointers), and reuse of names in JSON.
Finally, if you data needs to be small, simple, and fast, and you only use C, you can use flatcc's struct buffer feature:
In this case, the root of the buffer is a struct, very similar to a C struct, and you cannot have strings, tables, unions, or anything but inline fixed size arrays (including char arrays in C).
The benefit of struct buffers over native C structs is mainly that you get to have a schema, and you are guaranteed portability across platforms with different C compilers and endianness. The benefit over FlatBuffers with tables as root is speed and usually size for simple messages at the cost of portability since other implementations do not support struct buffers.
BTW: to better understand Derek's dump (excellent feature) you may want to have a look at:
There is an example that explains an example dump (that inspired the current dump format, but isn't exactly the same).
Mikkel