98国产精品综合一区二区三区,国产福利视频,男人添女人囗交做爰视频,日本免费一区二区三区视频观看

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當(dāng)前位置:首頁 >> 技術(shù)中心 >> 單片機入門 >> 堆與棧結(jié)合代碼和匯編解釋

堆與棧結(jié)合代碼和匯編解釋

關(guān)鍵字:C語言 堆棧 作者:admin 來源:不詳 發(fā)布時間:2018-05-19  瀏覽:33

 一般認(rèn)為在c中分為這幾個存儲區(qū)

1棧 - 由編譯器自動分配釋放

2堆 - 一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時可能由OS回收

3全局區(qū)(靜態(tài)區(qū)),全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。 - 程序結(jié)束釋放

4另外還有一個專門放常量的地方。 - 程序結(jié)束釋放

在函數(shù)體中定義的變量通常是在棧上,用malloc, calloc, realloc等分配內(nèi)存的函數(shù)分配得到的就是在堆上。在所有函數(shù)體外定義的是全局量,加了static修飾符后不管在哪里都存放在全局區(qū)(靜態(tài)區(qū)),在所有函數(shù)體外定義的static變量表示在該文件中有效,不能extern到別的文件用,在函數(shù)體內(nèi)定義的static表示只在該函數(shù)體內(nèi)有效。另外,函數(shù)中的 "adgfdf "這樣的字符串存放在常量區(qū)。

比如:

int a = 0; 全局初始化區(qū)

char *p1; 全局未初始化區(qū)

main()

{

int b; 棧

char s[] = "abc ";棧

char *p2; 棧

char *p3 = "123456 "; 123456\0在常量區(qū),p3在棧上。

static int c =0; 全局(靜態(tài))初始化區(qū)

p1 = (char *)malloc(10);

p2 = (char *)malloc(20);

分配得來得10和20字節(jié)的區(qū)域就在堆區(qū)。

strcpy(p1, "123456 "); 123456\0放在常量區(qū),編譯器可能會將它與p3所指向的 "123456 "優(yōu)化成一塊。

}

還有就是函數(shù)調(diào)用時會在棧上有一系列的保留現(xiàn)場及傳遞參數(shù)的操作。

棧的空間大小有限定,vc的缺省是2M。棧不夠用的情況一般是程序中分配了大量數(shù)組和遞歸函數(shù)層次太深。有一點必須知道,當(dāng)一個函數(shù)調(diào)用完返回后它會釋放該函數(shù)中所有的棧空間。棧是由編譯器自動管理的,不用你操心。

堆是動態(tài)分配內(nèi)存的,并且你可以分配使用很大的內(nèi)存。但是用不好會產(chǎn)生內(nèi)存泄漏。并且頻繁地malloc和free會產(chǎn)生內(nèi)存碎片(有點類似磁盤碎片),因為c分配動態(tài)內(nèi)存時是尋找匹配的內(nèi)存的。而用棧則不會產(chǎn)生碎片。

char s1[] = "aaaaaaaaaaaaaaa ";

char *s2 = "bbbbbbbbbbbbbbbbb ";

aaaaaaaaaaa是在運行時刻符值的,而bbbbbbbbbbb是在編譯時就確定的

但是,在以后的存取中,在棧上的數(shù)組比指針?biāo)赶虻淖址?例如堆)快。

比如:

#include

void main()

{

char a = 1;

char c[] = "1234567890 ";

char *p = "1234567890 ";

a = c[1];

a = p[1];

return;

}

10: a = c[1];

00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh]

0040106A 88 4D FC mov byte ptr [ebp-4],cl

11: a = p[1];

0040106D 8B 55 EC mov edx,dword ptr [ebp-14h]

00401070 8A 42 01 mov al,byte ptr [edx+1]

00401073 88 45 FC mov byte ptr [ebp-4],al

第一種在讀取時直接就把字符串中的元素讀到寄存器cl中,而第二種則要先把指針值讀到edx中,在根據(jù)edx讀取字符,顯然慢了。

一般大家說的堆棧和棧是一樣的,就是棧(stack),而說堆時才是堆heap.

棧是先入后出的,一般是由高地址向低地址生長。

編輯:admin  最后修改時間:2018-05-19

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2025 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

成人午夜福利视频| 色欲av永久无码精品无码蜜桃| 奶水美人双性h美人多汁| 国产精品理论片| 人禽无码做爰在线观看| 国产suv精品一区二区| 久爱WWW人成免费网站下载| 国产乱妇无码大片在线观看| 妺妺窝人体色777777| 亚洲最大的成人网站| aaaaa级少妇高潮大片免费看| 久久国产欧美国日产综合抖音| 亚洲精品一区中文字幕乱码| 我身上两个奶被男人揉搓| 玩两个丰满老熟女在线视频| 亚洲av永久无码国产精品久久| 欧美老熟妇乱大交xxxxx| 美女动态高潮激烈xxoo270| 国产av在线播放| 国产精品无码专区av在线播放| 小雪你的奶好大把腿张开| 羞羞漫画网页入口| 18一20亚洲gay无套| 天天做夜夜躁狠狠躁视频| japan少妇洗澡videos| 久久久久精品| 在线观看的资源视频| 欧美成人精品a片免费一区99| 久久精品国产亚洲av高清热| 狠狠色噜噜狠狠狠狠97首创麻豆| 苍井空在线av播放| 中国妇被黑人xxx猛交| 国产精品成人第一区二区三区| 女口述第一次放进去的感受| 人妻被按摩师玩弄到潮喷| 欧美在线观看| 美女高潮黄又色高清视频免费| 偷窥50个美女撒尿高清| 十大禁用软件app黄台大全下载| 亚洲一区二区嗯好爽快点| 亚洲精品国产成人|