int memmib[2] = { CTL_HW, HW_PHYSMEM };
uint64_t mem = 0;
size_t memsz = sizeof(mem);
if (sysctl(memmib, 2, &mem, &memsz, NULL, 0) == -1) {
syslog(LOG_WARNING, "sysctl(\"%s\"): %m", "hw.physmem");
} else {
/* The following assignment of mem to itself if the size
* of data returned is 32 bits instead of 64 is a clever
* C trick to move the 32 bits on big endian systems to
* the least significant bytes of the 64 mem variable.
*
* On little endian systems, this is effectively a no-op.
*/
if (memsz == 4)
mem = *(uint32_t *)&mem;
}
On Oct 5, 2005, at 2:02 PM, Daniel Quinlan wrote:
I would like to get the physical memory size on a Mac with some
call to a c routine, on both Panther and TIger. I have been
using sysctl with HW_PHYSMEM, but this returns a size in bytes in a
4 byte integer, which doesn't work well with 8 Gbytes
of memory. I think there's some function named Gestalt, but I
haven't found documentation nor the link line necessary
to use this.
Any suggestions?
Thanks,
-- danq
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Unix-porting mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/unix-porting/zarzycki%
40apple.com
This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Unix-porting mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/unix-porting/email@hidden