哪個C語言編譯器可以在除錯的時候能看到記憶體資訊

2025-01-04 10:50:16 字數 5106 閱讀 5781

1樓:網友

用就行了,以全英文版為例。

在你要看記憶體的程式**段,點手掌圖示(設斷點的意思),點f5(執行到斷點處),點view->debeg windows->裡面有幾個選項,分別是1、memory(檢視記憶體,你可以在裡面寫出你要看的位址值,比如0x10000000),2、registers(檢視32位暫存器值),3、disassembly(反彙編,可以查到寫的c語言,反彙編**的純彙編),4、call stack(檢視堆疊的值,對你寫的函式反向呼叫)。其它的不一定很有用,在主介面就可以看到。

2樓:網友

windows下的vc 和 linux下的gcc都可以。

如果覺得不夠詳細,就用一下除錯軟體 比如:softice/ollydbg/windbg之類的。

3樓:網友

這不是編譯器的問題,這是除錯程式的問題。不管什麼編譯器編譯出來的,合適的除錯程式都能看記憶體。比如vc自帶的除錯程式,比如linux下的gdb.

事實上除錯程式通常都能看記憶體,因為程式編譯的時候不一定帶有除錯資訊。只有編譯程式的時候把除錯資訊編譯進去了,除錯的時候才能看見**。而彙編是無論如何都在的。

4樓:幸福著孤單

你可以用單步除錯嘛,不就可以一步步的執行和檢視了嘛,就好像組合語言中的-t,單步除錯一定要會。

急求c語言編譯器,windows7可用,可以除錯的那種。。。。

5樓:網友

精簡版親測能用(包括64位),vs安裝檔案太大了,二精簡版只有十來m

6樓:0就是你

初學者的話用vc++就可以了。

vs2010, vs2012也可以的。

7樓:滿心飛雪

系統不能用的話可以安裝乙個虛擬機器。

電腦記憶體4g能執行c語言器嗎

8樓:踏雪也尋梅

筆者想先科普一下,c語言編譯器是指在dos介面下就能執行的東東,比如:,g++等等,這些東東只要臺486機子就能跑起來,編的程式不大的話,256記憶體執行也沒問題,但是dos介面下,需要一堆命令輸入才能實現編譯結果,這樣就出現了ide,可以將這一堆命令交由ide去實現,我們只要點乙個按紐,編譯自動完成,這些ide裡最熟的當然是vc++,以及其後的vs系列,隨著版本越高,越吃記憶體(筆者認為主要是函式與類的運用造就超耗記憶體,還有為int引數提供的記憶體也隨版本提高而增加),導致奔四的機子執行vs2010有點吃力,程式設計中記憶體需要高,cpu的需要也不低,4g的記憶體應夠了,不過你的cpu最好在酷睿i5以上或相當於這一水平較好一些。

9樓:

肯定可以,你說的應該是編譯器吧。

登陸中國建設網上銀行的時候彈出(偵錯程式已經發現執行在你的系統請卸下從記憶體和重啟你的程式,怎麼辦

10樓:零距離

如果不是你故意執行的偵錯程式,那可能中木馬了。

這個偵錯程式,是指除錯win程式的偵錯程式。看看任務列表的程序列表。

c語言陣列在記憶體中是怎麼分配的?

11樓:網友

c語言中記憶體為分三類:棧區、堆區、靜態資料區。

區域性變數在棧上分配,函式呼叫前的棧指標,要和函式返回後的棧指標一樣,否則就會出錯。

void test(void)

char i,a[10];

printf("0x%x", &i);

printf("0x%x", a);

printf("0x%x", a+1);

printf("0x%x", a+2);

printf("0x%x", a+3);

12樓:飛鷹

c語言使用的記憶體是虛擬記憶體。按照功能的不同在c語言中又將虛擬記憶體為分三類:棧區、堆區、靜態資料區,不管是單一變數還是陣列,其記憶體分配都是這樣分的。

虛擬記憶體是計算機系統記憶體管理的一種技術。它使得應用程式認為它擁有連續的可用的記憶體(乙個連續完整的位址空間),而實際上,它通常是被分隔成多個實體記憶體碎片,還有部分暫時儲存在外部磁碟儲存器上,在需要時進行資料交換。目前,大多數作業系統都使用了虛擬記憶體,如windows家族的「虛擬記憶體」;linux的「交換空間」等。

13樓:

關於多個變數一起定義的時候分配記憶體,是和具體的編譯環境有關的。這裡舉vc++和為例,這段源**是以。c副檔名儲存的。#include

int main()

char i,a[10];

return 0;

但是i和陣列a的前後關係卻有差異。在中i位於低位址端而在vc++中i卻位於高位址端。

樓主如果有其他的編譯環境也可以試試看。

14樓:網友

int a[10];

首先每個int佔4個位元組,所有要為區域性變數a申請40個位元組的棧空間,要申請棧空間,就是把sp(棧指標)的值減去40,然後a就是指向(sp-40)的指標,a[0]的位址就是(sp-40),a[1]的位址就是(sp-36),a[2]的位址就是(sp-32),以此類推。當然這些位址的計算工作都是編譯器在背後幫我們算好了,並存放在exe或dll檔案裡了。char i,a也是一樣的原理。

如果這樣還是不明白的話,你可以在除錯進斷點的時候,右鍵源**,選中「go to disassembly」進入彙編除錯頁。你可以看到,每個函式開始的時候都是有這幾行:

push ebp //儲存源指標的值,這裡不用管它。

mov ebp,esp //把棧指標的值賦值給ebp,在這個函式里面,都是通過這個ebp減去某個數值來操作區域性變數的。

sub esp, d0h //這個函式要裡總共要用到的棧空間,就是這句話申請的它的意思是"esp=esp-d0h".

int a[10];a[1]=1;

的彙編**就是。

mov dword ptr [ebp-28h],1

ebp就是原來的棧指標的值。

15樓:吉祥二進位

使用c語言程式設計,實際上使用的記憶體只有一種——虛擬記憶體。根據功能的不同在c語言中又將虛擬記憶體為分三類:棧區、堆區、靜態資料區,無論單一變數還是陣列,其記憶體分配都是如此。

其中,棧區、靜態資料區、堆區都會有編譯器負責分配、作業系統負責管理,程式設計師可以在堆區使用malloc()來動態分配堆記憶體。

1、棧區:一般每乙個函式對應乙個棧區,在編譯原理中稱為棧幀。比如下面的**:

int main()

return 0;

2、靜態資料區:這實際上對應於生成的可執行檔案的。data區段,因為這個區段在生成的可執行檔案中,因此是「靜態的」。比如下面的**:

定義乙個20個int元素的全域性陣列,此時陣列分配的虛擬記憶體稱為靜態資料區,有編譯器自行分配。

int g_a[20];

int main()

3、堆區:堆區是最複雜的,有作業系統負責堆管理,但是當用c語言編譯器生成乙個可執行檔案並且執行時,它會預設建立一些堆。拿windows來說,每一程式執行,它會建立至少兩個堆,乙個是預設堆,乙個是new堆。

比如下面的**:

int main()

16樓:網友

首先i和a是沒有關聯的 在棧區的空閒位址中隨機分配,a內部中,a元素是低位址,由於是char型的陣列,每個元素佔乙個位元組,所以從a。。。a依次位址加1

17樓:永遠在路上的人

c中分堆,棧,和常量區,堆是我們自己申請釋放的,棧由系統替我們管理,區域性變數和形參放在棧裡,棧根據增長方式的不同,有的系統是從低到高的,有的是從高到低的,有乙個堆疊指標指向棧頂,根據filo原則進行控制!用完了就銷燬!

18樓:網友

如果棧區:位址由高到低 b a[9] a[8]..a[1] a[0]

19樓:網友

int a[10];

a[0] a[1] a[2] .a[9]位址依次從低到高。

因為是int型陣列所以他們均相距sizeof(int) 個位元組。

20樓:網友

區域性變數才在棧上分配,函式呼叫前的棧指標,要和函式返回後的棧指標一樣,否則就是出錯了。

怎麼分配你可以自己打寫個小測試程式。

void test(void)

還有可能有對齊的問題,可能你會看到分配的位址不連續。

void test(void)

如果你看到的位址不連續,比如說4位元組對齊的話,i佔了乙個位元組,還剩下3個位元組,而j要4個位元組,上面剩下的3個位元組不能容下j,剩下的3個位元組就會不被利用,這時j和i的位址就不連續,會差3個位元組。如果沒有位址對齊的話應該是連續在棧上分配的。

21樓:網友

你下斷點除錯一下就知道了。

棧是倒著排列的,所以i在最後,順序是a[0] 0x22ff20

a[1] 0x22ff21

a[2]a[3]

a[9]ia[0]在棧頂。

具體見下圖,可以看到記憶體位址。

22樓:網友

連續分配的,a[1]和a[2]就在相鄰隔壁。

c語言編譯器和winrar解壓縮軟體,當它們除錯程式以及解壓縮的時候,哪個程式的靜態優先順序更高,為什麼?

23樓:匿名使用者

c語言編譯更高,應為c語言進行編譯的時候,i/o裝置繁忙。優先順序高於其他程序。

24樓:網友

相同、因為你在工作管理員,程序選項卡,右鍵點選要檢視的程式,優先順序,自己看。

c語言編譯器的介紹

25樓:青春無悔°舐獋

c語言是一種結構化語言。它層次清晰,便於按模組化方式組織程式,易於除錯和維護。c語言的表現能力和處理能力極強。

它不僅具有豐富的運算子和資料型別,便於實現各類複雜的資料結構。它還可以直接訪問記憶體的實體地址,進行位(bit)一級的操作。由於c語言實現了對硬體的程式設計操作,因此c語言集高階語言和低階語言的功能於一體。

既可用於系統軟體的開發,也適合於應用軟體的開發。此外,c語言還具有效率高,可移植性強等特點。因此廣泛地移植到了各類各型計算機上,從而形成了多種版本的c語言。

c的編譯器都有哪些翱謝謝C的編譯器都有哪些啊?謝謝!!!!

kdevelop anjuta code blocks visual mingw ideone eclipse cdt pilr code lite beans c dev c kdevelop是一個專為c c 及其他語言的開源擴充套件外掛ide,它基於kdevplatform平臺,這是一款可用於i...

哪個c語言編譯器比較好用?要自己用過的

編譯器有很多,但是比較好用的還是microsoft visual c microsoft visual c 是microsoft公司推出的開發win32環境程式,物件導向的視覺化整合程式設計系統。它不但具有程式框架自動生成 靈活方便的類管理 編寫和介面設計整合互動操作 可開發多種程式等優點,而且通過...

C 編譯器中哪個最好?(安裝時最好是中文的)

你說的應該是ide吧,編譯工作都是ide中內部的過程,例如microsoft的vc和vs就和linux下的gcc和g 不一樣,內不過我還是容覺得microsoft的好用,這個跟個人習慣有關。至於ide其實你什麼都沒用過的時候用什麼都覺得無所謂,一般都會先入為主,用的第一個編譯器你會覺得是最好的,我剛...