On Sun, Nov 18, 2012 at 9:10 PM, Hei Chan <structurechart@xxxxxxxxx> wrote: > > According to http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Atomic-Builtins.html, __sync_bool_compare_and_swap() supports int, long, long long, and their unsigned counterparts, and GCC will allow any integral scalar or pointer type that is 1, 2, 4 or 8 bytes in length. > > I wonder in what situation the pointer type won't be 1, 2, 4 or 8 bytes in length. Let's say I am running on a 64-bit Intel CPU. On a 64-bit Intel CPU pointer types will always be either 4 or 8 bytes (4 bytes if using x32). Remember that GCC supports many different targets. In any case the sentence does not imply that there will ever be a pointer type that is not 1, 2, 4 or 8 bytes (though of course there will be if GCC ever supports a 128-bit machine). The sentence also refers to integral types, and GCC supports integral types larger than 8 bytes on some processors, e.g., __int128_t on x86_64. Ian