程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++內存布局(1)-讓new出的兩個變量在堆上的地址連續

C++內存布局(1)-讓new出的兩個變量在堆上的地址連續

編輯:C++入門知識

大家都知道棧的地址按照從高到低的順序增長的,

而堆的地址是按照從底到高的順序增長的。

 *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下

image_thumb[7]

release下

image_thumb[6]

 

棧(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。分配方式類似於數據結構中的棧。

堆(heap) — 由程序員分配釋放, 若程序員不釋放,程序結束時由OS回收 。分配方式倒是類似於鏈表。

int *t1 = new (p1)int(1) — 重載operator new 的一個標准、全局的版本,原型是void *operator new( size_t, void *p ) throw() { return p; }在p所指的地方分配內存

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved