summaryrefslogtreecommitdiff
path: root/docs/keep_data_small.txt
diff options
context:
space:
mode:
Diffstat (limited to 'docs/keep_data_small.txt')
-rw-r--r--docs/keep_data_small.txt20
1 files changed, 13 insertions, 7 deletions
diff --git a/docs/keep_data_small.txt b/docs/keep_data_small.txt
index 72de2d1..15e41ae 100644
--- a/docs/keep_data_small.txt
+++ b/docs/keep_data_small.txt
@@ -163,14 +163,20 @@ ridiculously large values. asm output diff for above example:
gcc doesn't seem to have options for altering this behaviour.
-gcc 3.4.3:
+gcc 3.4.3 and 4.1.1 tested:
+char c = 1;
// gcc aligns to 32 bytes if sizeof(struct) >= 32
-struct st {
- int c_iflag,c_oflag,c_cflag,c_lflag;
- int i1,i2,i3; // struct will be aligned to 4 bytes
-// int i1,i2,i3,i4; // struct will be aligned to 32 bytes
-};
-struct st t = { 1 };
+struct {
+ int a,b,c,d;
+ int i1,i2,i3;
+} s28 = { 1 }; // struct will be aligned to 4 bytes
+struct {
+ int a,b,c,d;
+ int i1,i2,i3,i4;
+} s32 = { 1 }; // struct will be aligned to 32 bytes
// same for arrays
char vc31[31] = { 1 }; // unaligned
char vc32[32] = { 1 }; // aligned to 32 bytes
+
+-fpack-struct=1 reduces alignment of s28 to 1 (but probably will break layout
+of many libc structs) but s32 and vc32 are still aligned to 32 bytes.