With all the talk of 64bit CPU on the new iPhone 5s with only 1GB of RAM. I wonder if it will be subject to the 64bit memory address penalty, or if iOS is using something similar to X32?
[1] http://www.phoronix.com/scan.php?page=news_item&px=MTM1OTA
With all the talk of 64bit CPU on the new iPhone 5s with only 1GB of RAM. I wonder if it will be subject to the 64bit memory address penalty, or if iOS is using something similar to X32?
[1] http://www.phoronix.com/scan.php?page=news_item&px=MTM1OTA
A + B = 100
2A + B = 190
=> A = 90, B = 10
So if 90% of your memory usage is pointers, this is great. But I don't think that this is a typical workload. Otherwise, the performance advantage is not as clear.Wikipedia notes that "On average x32 is 5–8% faster on the SPEC CPU integer benchmarks compared to x86-64 but it can as likely be much slower. There is no speed advantage over x86-64 in the SPEC CPU floating point benchmarks."
Perhaps the reason that no tier-one Linux distro ships with x32 images is that the additional complexity of supporting an additional ABI is not seen to be worth the modest performance increases.
[1]: http://www.spec.org/cpu2000/CINT2000/181.mcf/docs/181.mcf.ht...
https://wiki.openjdk.java.net/display/HotSpot/CompressedOops
[1] http://www.mikeash.com/pyblog/friday-qa-2013-09-27-arm64-and...
You can use them as tagged pointers [1], and I think that Apple's Obj-C runtime actually does this. (I don't know for sure, as it's not really something I'm interested in, but I think I saw an article about it. I could be wrong.)
The wackiest thing about that is... if there are multiple pointers to an object (kind of the point of reference counting) and the reference count is part of the pointer... well... I don't really see that working well at all. OTOH I could see there being some optimization that means some callers might not need to modify the global reference count, only the one in their reference.
Mike Ash wrote an excellent summary:
http://www.mikeash.com/pyblog/friday-qa-2013-09-27-arm64-and...