筆記5 程式中獲取記憶體的方法

2021-08-14 07:45:46 字數 1017 閱讀 2119

程式中獲取記憶體的方法

反覆使用:棧內存在程式中其實就是那一塊空間,程式反覆使用這一塊空間。

臨時性:函式不能返回函式區域性變數的位址,因為函式執行完返回後這個區域性變數已經不在了

這個區域性變數是分配在棧上的,雖然不在了但是棧記憶體還在還可以訪問,但是訪問實際上這個記憶體位址已經和當時那個變數無關了。

作業系統堆管理器管理;堆管理器是作業系統的乙個模組,堆管理記憶體分配靈活,按需分配

malloc之後,free之前,malloc返回的指標和記憶體相繫結,該指標是那段內存在當前程序的唯一聯絡人

如果指標在free之前就弄丟了,那麼這段記憶體就永遠丟了。

free告訴堆管理器這段記憶體我用完了你可以**了。堆管理器**了這段記憶體後這段記憶體當前程序就不該再使用了。因為釋放後堆管理器就可能把這段記憶體再次分配給別的程序,所以你不能再用了。

3.1.1

編譯器在編譯程式的時候,將程式中的所有的元素分成了一些組成部分,各部分構成乙個段,所以說段是可執行程式的組成部分。

3.1.2

**段:**段就是程式中的可執行部分,直觀理解**段就是函式堆疊組成的。

資料段(資料區,靜態資料區):資料段就是程式中的資料,直觀理解就是c語言中的全域性變數

(注意:全域性變數才算是程式的資料,區域性變數不算程式的資料,只能算是函式的資料)

bss段(zt(zero initial)):bss段的特點就是被初始化為0,bss段本質上也屬於資料段,bss段就是被初始化為0的資料段。

注意區分:資料段和bss段的區別和聯絡:二者本來沒有區別,都是用來存放c程式中的全域性變數。區別在於把顯示初始化為非零的全域性變數存在資料段中,而把顯式初始化為0或者並未顯式初始化(c語言規定未顯示初始化的全域性變數值預設為0)的全域性變數存在bss段

注意:

有些特殊資料會被放到常量區

3.1.3

c語言中使用char *p = 「linux」;

定義字串時,字串」linux」實際被分配在常量區(老朱說是**段),也就是說這個」linux」是常量字串而不是變數字串。

獲取程式路徑的方法

用vc寫程式時經常要獲取程式的路徑主要有以下三種方法 1,是的到應用程式的當前目錄,但當前目錄不一定等於應用程式執行檔案的所在目錄,乙個應用程式被啟動時,當前目錄是可以被任意設定的。2,getcurrentdirectory同.3,getmodulefilename 得到模組的完整路徑名,例如,你載...

iOS複習筆記5 記憶體管理之set方法

1 alloc和release成對出現 2 set方法 2.1 基礎型別直接賦值 2.2 oc物件 判斷不等 retain新的,釋放舊的,再賦值 3 dealloc方法 3.1 一定要呼叫 super dealloc 且放在最後 3.2 self擁有的物件要做一次release inte ce bo...

python獲取記憶體中的資料

import ctypes ctypes.cast id 1 ctypes.py object value 1 注 跨執行緒或跨ide不會成功,報 segmentation fault 錯誤 另外,理論上所有的記憶體位址資料都可以獲取到,也可寫入資料,比如multiprocessing.queue例...