diff --git a/docs/smallint.txt b/docs/smallint.txt index df6796447..b57dfd775 100644 --- a/docs/smallint.txt +++ b/docs/smallint.txt @@ -8,14 +8,15 @@ I think that this optimization is wrong. index_in_str_array returns int. At best, compiler will use it as-is. -At worst, compiler will try to make sure that it is properly casted +At worst, compiler will try to make sure that it is properly cast into a byte, which probably results in "n = n & 0xff" on many architectures. You save nothing on space here because i is not stored on-stack, -gcc will keep it in register. And even it is *is* stored, +gcc will keep it in register. And even if it *is* stored, it is *stack* storage, which is cheap (unlike data/bss). small[u]ints are useful _mostly_ for: + (a) flag variables (a1) global flag variables - make data/bss smaller (a2) local flag variables - "a = 5", "a |= 0x40" are smaller @@ -26,10 +27,11 @@ small[u]ints are useful _mostly_ for: movl $0x0,(%eax) is "c7 00 00 00 00 00" movb $0x0,(%eax) is "c6 00 00" (b) small integer structure members, when you have many such -structures allocated, + structures allocated, or when these are global objects of this structure type small[u]ints are *NOT* useful for: + (a) function parameters and return values - they are pushed on-stack or stored in registers, bytes here are *harder* to deal with than ints