###運行代碼 讓計算機告訴你數據類型站內存狀況node
//32位系統,地址長度是32位(bit),也就是4Byte 64位系統,地址長度是64位(bit),也就是8Byte //注意 1byte = 8 bit;sizeof byte #import <Foundation/Foundation.h> int main(int argc, char *argv[]) { @autoreleasepool { char a[] = "go swift"; //自動爲末尾加上'/0',注意空格也要佔字節 char b[14] = "go swift"; char *c = a; char *d = "01234"; int16_t t16; int32_t t32; int64_t t64; NSLog(@"%ld", sizeof(a)); NSLog(@"%ld", sizeof(b)); NSLog(@"%ld", sizeof(c)); NSLog(@"%ld", sizeof(d)); //d是指向字符串常量的字符指針 NSLog(@"%ld", sizeof(*d)); //*d是第一個字符 (所佔大小由數據類型決定) NSLog(@"int type: %ld,%ld,%ld,%ld", sizeof(t16),sizeof(t32),sizeof(t64),sizeof(&t16)); } }
###執行結果x86_64swift
2016-06-12 10:51:06.651 goswift[36141:474463] 9 2016-06-12 10:51:06.652 goswift[36141:474463] 14 2016-06-12 10:51:06.652 goswift[36141:474463] 8 2016-06-12 10:51:06.652 goswift[36141:474463] 8 2016-06-12 10:51:06.652 goswift[36141:474463] 1 2016-06-12 10:59:41.724 goswift[37006:485097] int type: 2,4,8,8
###計算字符串 佔多少byte佈局
NSString *str=@"ABCDEFGHIJKLMNOPQRSTUVWXYZ"; NSUInteger bytes = [str lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"%lu bytes", bytes);
###內存對齊操作系統
結構體的內存佈局依賴於CPU
、操做系統
、編譯器
及編譯時的對齊選項
指針
//內存對齊,簡單的說訪存總線的位數固定,以32位總線爲例,地址總線的地址老是4對齊的,因此數據也四對齊的話 struct node1{ char a;//32位機 佔1個字節 int b;//32... 4個字節 }; sizeof(node1)// 結果等於8 struct node2{ int a; int b; }; sizeof(node2)// 結果等於8