日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS程序内存分布

發布時間:2024/1/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS程序内存分布 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

iOS的程序內存分為五大區域,分別為棧,堆,BSS,全局變量,代碼區。

分配時間區域名稱描述
運行時分配局部變量,函數參數
運行時分配程序代碼new出的對象
編譯時分配BSS靜態變量,未初始化的全局變量
編譯時分配數據段已經初始化的全局變量,常量
編譯時分配代碼段程序二進制代碼

棧區的地址一般以0x7開頭,堆區的地址一般以0x6開頭,這兩個區域是函數調用的時候分配,函數執行結束后一般會釋放。BSS區域,常量區域內存在程序運行期間一直存在,直到程序運行結束。

使用iOS工程,寫一個方法testMethod,放入到ViewController的viewDidLoad中,斷點到testMethod可以查看對應的變量。

//文件頭部的靜態變量和全局變量 //static NSInteger test = 1; //const NSString *str = @"hello";- (void)viewDidLoad {[super viewDidLoad];[self testMethod:@"method"]; }- (void)testMethod:(NSString *)param {NSString *local = [[NSString alloc] initWithFormat:@"%@", @"hello world!"];NSString *localstr = [[NSString alloc] initWithFormat:@"%@", @"hello"];//局部變量NSInteger tmpInt = 2;//堆變量NSLog(@"%@", local);//taggedPointerNSLog(@"%@", localstr);//全局變量NSLog(@"%@", str);//靜態變量NSLog(@"%ld", test); }

在方法的最后一行打斷點,斷點執行到的時候,右擊debug區域的變量,選擇View Memory of "xxxx"可以看到這個變量的內存地址。這里有個變量比較特殊,局部變量localstr在debug 區域可以看到它是NSTaggedPointerString,也沒有放在堆區。對于這種較短的字符串,蘋果做了優化,沒有將他們放到堆區,而是直接把值寫入到指針中,以便加快訪問速度,并減少內存。

總結

以上是生活随笔為你收集整理的iOS程序内存分布的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。