當前位置:名人名言大全網 - 傷感說說 - C語言知識:說說下列聲明的不同之處

C語言知識:說說下列聲明的不同之處

char *a = "abc"存放在常量區或靜態存儲區,這個和編譯器有關,在編譯時將其當做了壹個常量,相當於const類型; char b[] = "abc"存放在棧存儲區,而不在堆存儲區中;

char c[3] = "abc"存放在堆存儲區,堆存儲區壹般通過申請內存獲得,比如new操作。

下面說明壹下C語言跟內存分配有關的這三種方式:

(1)從靜態存儲區域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。例如全局變量,static變量。

(2)在棧上創建。在執行函數時,函數內局部變量的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放,遵循先進後出的原則。棧內存分配運算內置於處理器的指令集中,效率很高,但是分配的內存容量有限。該方式沒有內存碎片產生,程序員無需幹預內存的分配。

(3)從堆上分配,亦稱動態內存分配。程序在運行的時候用malloc或new申請任意多少的內存,程序員自己負責在何時用free或delete釋放內存。動態內存分配方式需要程序員的幹預,而且會產生內存碎片,其生存期由我們決定,使用非常靈活,但問題也最多。