long
これは aを toにキャストする正しい方法void *
ですか? -O2
プログラムで使用するとセグメンテーション違反が発生しQt
ます。を使用するとセグメンテーション違反になりません-O1
。
使用するreinterpret_cast<void *>(tp.tv_nsec)
と、 を使用してセグメンテーション違反も発生し-O2
ます。
なぜセグメンテーション違反があるのですか?
timespec tp; // struct that holds nanoseconds since Epoch
clock_gettime(CLOCK_REALTIME, &tp); // tv_nsec is a long int
void *test = mmap((void *)(tp.tv_nsec), 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
printf("%p\n", test);
printf("%li\n", (long)test);
編集:私の知る限り、目的は間違って表現されているようです。目的は、ランダムなメモリ アドレスを割り当てるために乱数を取得することです。そうすれば、テスト プログラム全体で mmap() を何度も使用して、mmap() に乱数を供給するたびに、ランダムなメモリ アドレスを取得できます。そうでない場合、mmap() はメモリを順番に割り当てているようです。