大家都知道棧的地址按照從高到低的順序增長的,
而堆的地址是按照從底到高的順序增長的。
*n1 = ( *n2 = (<< << n1 << << n2<< <<<<()n1-()n2<<<< << &n1 << << &n2 << <<<< ()&n1 - ()&n2 <<<< (*) << endl;
n1和n2是儲存在棧上的
而它們所指的空間是位於堆上的
這裡我發現在VS2013 debug模式下的結果是,n2和n1相差了12而不是8
切換到release下發現
我們先用malloc分配出一塊大小為兩個int的內存
這時p1指向這塊內存的起點
我們再將p1移動int個大小的內存得到了p2
然後分別在p1和p2所指的地址上構建變量
這樣就使的new出的兩個變量在堆上的地址連續了
debug下
release下
棧(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。分配方式類似於數據結構中的棧。
堆(heap) — 由程序員分配釋放, 若程序員不釋放,程序結束時由OS回收 。分配方式倒是類似於鏈表。
int *t1 = new (p1)int(1) — 重載operator new 的一個標准、全局的版本,原型是void *operator new( size_t, void *p ) throw() { return p; }在p所指的地方分配內存