iOS 記憶體管理面試題(記憶體布局)

2021-09-29 10:12:49 字數 1585 閱讀 9836

記憶體布局

2、64bit和32bit下 long 和char所佔位元組是不同的*

char:1位元組(ascii 2 = 256個字元)

char*(即指標變數):4個位元組(32位的定址空間是2,即32個bit,也就是4個位元組。同理64位編譯器為8個位元組)

short int : 2個位元組 範圍 -2~> 2 即 -32768~>32767

int: 4個位元組 範圍 -2147483648~>2147483647

unsigned int : 4個位元組

long: 4個位元組 範圍 和int一樣 64位下8個位元組,範圍

-9223372036854775808~9223372036854775807

long long: 8個位元組 範圍-9223372036854775808~9223372036854775807

unsigned long long: 8個位元組 最大值:1844674407370955161

float: 4個位元組

double: 8個位元組。

3、static、const和sizeof關鍵字

static關鍵字

在函式內定義的靜態區域性變數,該變數存在記憶體的靜態區,所以即使該函式執行結束,靜態變數的值不會被銷毀,函式下次執行時能仍用到這個值。

在函式外定義的靜態變數——靜態全域性變數,該變數的作用域只能在定義該變數的檔案中,不能被其他檔案通過extern引用。

靜態函式只能在宣告它的原始檔中使用。

const關鍵字

const int a = 5;/*a的值一直為5,不能被改變*/

const int b; b = 10;/*b的值被賦值為10後,不能被改變*/

const int *ptr; /*ptr為指向整型常量的指標,ptr的值可以修改,但不能修改其所指向的值*/

int *const ptr;/*ptr為指向整型的常量指標,ptr的值不能修改,但可以修改其所指向的值*/

const int *const ptr;/*ptr為指向整型常量的常量指標,ptr及其指向的值都不能修改*/

int fun(const int a);或int fun(const char *str);
const char *getstr(void);使用:const *str= getstr();

const int getint(void); 使用:const int a =getint();

sizeof關鍵字

sizeof是在編譯階段處理,且不能被編譯為機器碼。sizeof的結果等於物件或型別所佔的記憶體位元組數。sizeof的返回值型別為size_t。

(1)展開後的結構體的第乙個成員的偏移量應當是被展開的結構體中最大的成員的整數倍。

(2)結構體大小必須是所有成員大小的整數倍,這裡所有成員計算的是展開後的成員,而不是將巢狀的結構體當做乙個整體。

iOS經典面試題總結 記憶體管理

1.什麼是arc?arc是automatic reference counting自動引用計數,在程式編譯時自動加入retain release。在物件被建立時retain count 1,在物件被release時count 1,當count 0時,銷毀物件。程式中加入autoreleasepool...

C 記憶體管理相關面試題

1.malloc free和new delete的區別 malloc free和new delete的共同點是 都是從堆上申請空間,並且需要使用者手動釋放。不同的地方是 1.malloc和free是函式,new和delete是操作符2.malloc申請的空間不能初始化,而new可以初始化 3.mal...

面試題 動態記憶體管理

1.malloc void malloc size t size 用來向記憶體申請一塊連續可用的空間,並返回指向這塊空間的指標 1 開闢成功,返回乙個指向開闢好空間的指標 開闢失敗,返回乙個null指標,因此malloc的返回值一定要用assert檢查 2 返回值是void 所以malloc函式並不...