なぜこのプログラムは:
#include <stdio.h>
#include <Foundation/NSDate.h>
int main() {
printf("%p\n", [NSDate distantPast]);
return 0;
}
64 ビット マシンで不正なポインターを返しますか? (私の場合は0xc22d63c8c500000d)
なぜこのプログラムは:
#include <stdio.h>
#include <Foundation/NSDate.h>
int main() {
printf("%p\n", [NSDate distantPast]);
return 0;
}
64 ビット マシンで不正なポインターを返しますか? (私の場合は0xc22d63c8c500000d)
これはタグ付きポインターです。これらには最下位ビットが設定されており、他のビットには型と値が含まれています。これらは、メモリ割り当てを回避する特定の型のコンパクトな表現を提供します。詳細については、Mike Ash のブログ記事を参照してください。