私は今OS X 10.10.5を使用している、と私は以下のようにmallocとヒープについての実験をやっている:mallocの戻り値がプロセスメモリマップにないのはなぜですか?
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p;
p = malloc(sizeof(int));
*p = 100;
printf("the malloc p pointer addr is %x\n", p);
getchar();
}
入れてはthe malloc p pointer addr is c3404ba0
です。
アドレス0xc3404ba0
は、プロセスヒープの一部としてmacllocによって割り当てられていると思います。
は、その後、私は、メモリ・マップを取得するvmmap
ツールを使用して、結果は次のとおりです。
我々は0xc3404ba0
は、ヒープ領域ではありませんが、それは本当に割り当てられたメモリへのポインタだと見ることができます。それのどこが悪いんだい? @Alex垂れに
感謝:。
それは私が代わりに%xの%pを使用した場合、出力はthe malloc p pointer addr is 0x7fe131404ba0
あるとvmmap出力があり、今修正します
が見えます。あなたのプログラムが64ビットモードでコンパイルされている場合、 '%x'を使用してポインタを印刷すると、上位32ビットが切り捨てられます。代わりに '%p'を使って同じことを試し、結果を投稿してください。 –
間違った書式指定子を使用すると**未定義の動作**が発生する** http://stackoverflow.com/q/33648596/995714 http://stackoverflow.com/q/4231891/995714 http://stackoverflow.com/q/14504148/995714 http://stackoverflow.com/q/16864552/995714 –