Cのポインタは由来を考慮する
Cのポインタは どこから作られたのか を考慮する場合があるので、同じアドレスであっても同値と扱わないことがある。これをポインタのprovenance1という。
例えば以下のコードでは
#include <stdio.h>
intmain(void){ long n, *p1; long v, *p2;
p1 = &n; p1++; p2 = &v; printf("p1 = %p; p2 = %p; %d\n", p1, p2, p1 == p2); return 0;}GCC 14で試したところ、provenanceが常に有効となる訳ではなく、最適化オプションを付けると有効になるらしい。
$ cc main.c$ ./a.outp1 = 0x7ffff7da73e0; p2 = 0x7ffff7da73e0; 1
$ cc -O1 main.c$ ./a.outp1 = 0x7fff056f1030; p2 = 0x7fff056f1030; 0Footnotes
Section titled “Footnotes”-
provenanceは出自とか由来といった意味を持つ単語 ↩