As the question was well explained by other answers, this answer is intended for adding some examples for the demonstration of the effect of adding the attributes packed or aligned. The environment is x64 linux.
Example 1:
#include <stdio.h>
int main()
{
struct {
char c;
int i;
} obj[2];
printf("obj[0] addr: %p, size: %lu\n", &obj[0], sizeof(obj[0]));
printf(".c addr: %p, .i addr: %p\n", &obj[0].c, &obj[0].i);
printf("obj[1] addr: %p, size: %lu\n", &obj[1], sizeof(obj[1]));
printf(".c addr: %p, .i addr: %p\n", &obj[1].c, &obj[1].i);
return 0;
}
Output 1:
obj[0] addr: 0x7ffe397e2050, size: 8
.c addr: 0x7ffe397e2050, .i addr: 0x7ffe397e2054
obj[1] addr: 0x7ffe397e2058, size: 8
.c addr: 0x7ffe397e2058, .i addr: 0x7ffe397e205c
i.e.
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| c | rsv | i | c | rsv | i |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
^ ^
| |
obj[0] obj[1]
Example 2:
struct __attribute__ ((packed)) {
char c;
int i;
} obj[2];
obj[0] addr: 0x7fff82b107ee, size: 5
.c addr: 0x7fff82b107ee, .i addr: 0x7fff82b107ef
obj[1] addr: 0x7fff82b107f3, size: 5
.c addr: 0x7fff82b107f3, .i addr: 0x7fff82b107f4
i.e.
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 8 | 9 | A | B | C | D | E | F | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| others | c | i | c | i |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
^ ^
| |
obj[0] obj[1]
Example 3:
struct __attribute__ ((packed, aligned (4))) {
char c;
int i;
} obj[2];
obj[0] addr: 0x7fffcc3d40d0, size: 8
.c addr: 0x7fffcc3d40d0, .i addr: 0x7fffcc3d40d1
obj[1] addr: 0x7fffcc3d40d8, size: 8
.c addr: 0x7fffcc3d40d8, .i addr: 0x7fffcc3d40d9
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| c | i | rsv | c | i | rsv |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
^ ^
| |
obj[0] obj[1]
aligned(4)you probably don't have much to worry about.