On 04/12/14 6:38 PM, Peter Corlett wrote:
On Thu, Dec 04, 2014 at 02:21:50PM -0800, Guy
Sotomayor wrote:
On Dec 4, 2014, at 1:50 PM, Peter Corlett
<abuse at cabal.org.uk> wrote:
[...]
>> So on systems where sizeof(int) <= sizeof(int32_t) -- which is everything
>> that matters
> Really? Where have you been? OS X the default has been to compile for
> 64-bits in which case sizeof(int) == sizeof(int64_t) since Leopard (10.5) in
Maybe not:
g5:~ toby$ cc -o test test.c
g5:~ toby$ ./test
sizeof(int) = 4
g5:~ toby$ uname -a
Darwin g5 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:57:01 PDT
2009; root:xnu-1228.15.4~1/RELEASE_PPC Power Macintosh
--Toby
2009. The
kernel went default 64-bits in Snow Leopard (10.6) in 2010. OS X
on x86 has always supported mixed 32/64 bit applications (as long as the CPU
did) regardless of what the kernel was (a 32-bit kernel could run 64-bit
applications).
Sorry, but you're wrong:
$ clang --version
Apple LLVM version 6.0 (clang-600.0.51) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix
$ cat sizeof.c
#include <stdio.h>
int main(void) {
printf("sizeof(int) == %lu\n", sizeof(int));
return 0;
}
$ clang -m64 -Wall sizeof.c && ./a.out
sizeof(int) == 4
The width of a *pointer* matches the architecture, 32 bits for i386 and 64 for
x86_64, but the width of an *int* remains 32 bits for compatibility and
performance reasons. The 64 bit integer type is called "long long" on both
architectures. Obviously, one should use the typedefs in <inttypes.h> if a
specific width integer is required, even if only to document intent.
Have a look at the SysV ABI at
http://www.x86-64.org/documentation.html for far
too much gory detail and prime pedant material.