diff options
-rw-r--r-- | docs/keep_data_small.txt | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/docs/keep_data_small.txt b/docs/keep_data_small.txt index 66f92b321..fcd8df4a9 100644 --- a/docs/keep_data_small.txt +++ b/docs/keep_data_small.txt | |||
@@ -125,3 +125,32 @@ less readable, use #defines: | |||
125 | If applet doesn't use much of global data, converting it to use | 125 | If applet doesn't use much of global data, converting it to use |
126 | one of above methods is not worth the resulting code obfuscation. | 126 | one of above methods is not worth the resulting code obfuscation. |
127 | If you have less than ~300 bytes of global data - don't bother. | 127 | If you have less than ~300 bytes of global data - don't bother. |
128 | |||
129 | |||
130 | gcc's data alignment problem | ||
131 | |||
132 | The following attribute added in vi.c: | ||
133 | |||
134 | static int tabstop; | ||
135 | static struct termios term_orig __attribute__ ((aligned (4))); | ||
136 | static struct termios term_vi __attribute__ ((aligned (4))); | ||
137 | |||
138 | reduced bss size by 32 bytes, because gcc sometimes aligns structures to | ||
139 | ridiculously large values. asm output diff for above example: | ||
140 | |||
141 | tabstop: | ||
142 | .zero 4 | ||
143 | .section .bss.term_orig,"aw",@nobits | ||
144 | - .align 32 | ||
145 | + .align 4 | ||
146 | .type term_orig, @object | ||
147 | .size term_orig, 60 | ||
148 | term_orig: | ||
149 | .zero 60 | ||
150 | .section .bss.term_vi,"aw",@nobits | ||
151 | - .align 32 | ||
152 | + .align 4 | ||
153 | .type term_vi, @object | ||
154 | .size term_vi, 60 | ||
155 | |||
156 | gcc doesn't seem to have options for altering this behaviour. | ||