const int nsize = 5;
棧上分配記憶體並初始化、賦值
unsigned stack_[nsize];
memset(stack_,0,sizeof(unsigned)*nsize);
for (int i = 0; i < nsize; i++)
彙編:
unsigned stack_[nsize];
memset(stack_,0,sizeof(unsigned)*nsize);
00e313f8 push 14h
00e313fa push 0
00e313fc lea eax,[stack_]
00e313ff push eax
00e31400 call _memset (0e31078h)
00e31405 add esp,0ch
//首先壓入20、0、stack_位址,然後呼叫_memset初始化,最後esp指標回到壓棧位址。
for (int i = 0; i < nsize; i++)
00e31408 mov dword ptr [ebp-28h],0
00e3140f jmp wmain+4ah (0e3141ah)
00e31411 mov eax,dword ptr [ebp-28h]
00e31414 add eax,1
00e31417 mov dword ptr [ebp-28h],eax
00e3141a cmp dword ptr [ebp-28h],5
00e3141e jge wmain+5ch (0e3142ch)
//[ebp-28h為i的位址,
00e3142a jmp wmain+41h (0e31411h)
堆上分配記憶體並初始化、賦值
unsigned* heap_ = new unsigned[nsize];
memset(heap_,0,sizeof(unsigned)*nsize);
for (int i = 0; i < nsize; i++)
反彙編:
unsigned* heap_ = new unsigned[nsize];
00e3142c push 14h
00e3142e call operator new (0e31190h)
00e31433 add esp,4
00e31436 mov dword ptr [ebp-10ch],eax
00e3143c mov eax,dword ptr [ebp-10ch]
00e31442 mov dword ptr [heap_],eax
memset(heap_,0,sizeof(unsigned)*nsize);
00e31445 push 14h
00e31447 push 0
00e31449 mov eax,dword ptr [heap_]
00e3144c push eax
memset(heap_,0,sizeof(unsigned)*nsize);
00e3144d call _memset (0e31078h)
00e31452 add esp,0ch
for (int i = 0; i < nsize; i++)
00e31455 mov dword ptr [ebp-40h],0
00e3145c jmp wmain+97h (0e31467h)
00e3145e mov eax,dword ptr [ebp-40h]
00e31461 add eax,1
00e31464 mov dword ptr [ebp-40h],eax
00e31467 cmp dword ptr [ebp-40h],5
00e3146b jge wmain+0abh (0e3147bh)
00e31479 jmp wmain+8eh (0e3145eh)
分配在堆上還是分配在棧上及其區別
1.問題情景 由c 的string的變數分配在堆上,而不是分配在棧上引起的內容回顧。注釋 c 的string型別是引用型別,不同於int,float等值型別。2.解析 1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等,記憶體的分配是連續的,類似於平時我們所說的棧,如果還...
C new 堆上和棧上分配物件
1 說明 new 1 一種運算子 malloc是一種c中的庫函式 2 先分配物件 operator new 再構造物件,一般用於滿足自定義的類型別 2 原型 原型 void operator new size t throw bad alloc 解釋 該函式的返回值是乙個void 指標,同時有可能會...
值初始化和預設初始化的區別
如果使用等號 初始化乙個變數,實際上執行的是拷貝初始化,編譯器把等號右側的初始值拷貝到新建立的物件中去。與之相反,如果不使用等號,則執行的是直接初始化。當初始值只有乙個時,使用直接初始化或拷貝初始化都行。如果用多個值進行初始化的情況,非要用拷貝初始化的方式處理也不是不可以,不過需要顯式地建立乙個 臨...