模擬實(shí)現(xiàn)C語言中的內(nèi)存管理
這里模擬了C語言中的內(nèi)存管理,當(dāng)我們要?jiǎng)?chuàng)建或者使用一個(gè)對象時(shí),那么這個(gè)對象會調(diào)用retain方法,計(jì)數(shù)+1,當(dāng)我們要釋放對象,我們會調(diào)用free,這里注意要對計(jì)數(shù)記性判斷,如果是0的話,那么就會銷毀。
#import <Foundation/Foundation.h>
int cnt = 0;
void fun (charchar * p)
{
printf("%c\n",p[0]);
}
charchar * retain1(charchar * p)
{
//retain(p);
cnt ++;
return p;
}
void dealloc1(charchar *p)
{
free(p);
}
void release(charchar * p)
{
cnt--;
if (cnt == 0) {
//free(p);
dealloc1(p);
}
}
int main(int argc, const charchar * argv[])
{
@autoreleasepool {
charchar * p = (charchar *)malloc(1000);
p[0] = 'a';
p[1] = 'b';
charchar * q = p;
//提前釋放
//free(p);
//printf("%c\n",p[0]);
free(q);
//free(q);
}
return 0;
}
以上就是模擬C語言中內(nèi)存管理的實(shí)現(xiàn)代碼,希望對大家的學(xué)習(xí)有所幫助。
相關(guān)文章
如何用C寫一個(gè)web服務(wù)器之CGI協(xié)議
本文主要介紹了如何用C寫一個(gè)web服務(wù)器之CGI協(xié)議,對C語言和web感興趣的同學(xué),可以詳細(xì)看下,并且試驗(yàn)一下。2021-05-05
C++中用棧來判斷括號字符串匹配問題的實(shí)現(xiàn)方法
這篇文章主要介紹了C++中用棧來判斷括號字符串匹配問題的實(shí)現(xiàn)方法,是一個(gè)比較實(shí)用的算法技巧,包含了關(guān)于棧的基本操作,需要的朋友可以參考下2014-08-08
C語言實(shí)現(xiàn)基于最大堆和最小堆的堆排序算法示例
這篇文章主要介紹了C語言實(shí)現(xiàn)基于最大堆和最小堆的堆排序算法示例,分別是基于最大堆的升序排序和基于最小堆的降序排序?qū)嵗?需要的朋友可以參考下2016-06-06
關(guān)于C語言多線程pthread庫的相關(guān)函數(shù)說明
下面小編就為大家?guī)硪黄P(guān)于C語言多線程pthread庫的相關(guān)函數(shù)說明。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
C++ 實(shí)現(xiàn)漢諾塔的實(shí)例詳解
這篇文章主要介紹了C++ 實(shí)現(xiàn)漢諾塔的實(shí)例詳解的相關(guān)資料,這里主要說明C++中數(shù)據(jù)結(jié)構(gòu)的遞歸的應(yīng)用,需要的朋友可以參考下2017-08-08
windows系統(tǒng)下C++調(diào)用matlab程序的方法詳解
這篇文章主要給大家介紹了關(guān)于在windows系統(tǒng)下C++調(diào)用matlab程序的方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08

