gpt4 book ai didi

ios - NSString 文字放在内存中的什么位置?

转载 作者:行者123 更新时间:2023-11-28 18:15:07 30 4
gpt4 key购买 nike

我对 NSString 进行了测试。

int a = 10;
NSString *str1 = @"str";
NSString *str2 = [NSString stringWithFormat:@"str"];
NSString *str3 = @"str";
NSString *str4 = @"str2";
NSLog(@"%p %p | 3 %p | 4 %p | a %p", str1,str2,str3,str4,&a);

结果是

0x1286287c8 0xa000000007274733 | 3 0x1286287c8 | 4 0x1286287e8 | a 0x7ffeeb215b14

本次测试在 iPhone 6s(11.1) Simulator 中进行。那么str1在内存中的位置是什么?是堆栈还是堆?

最佳答案

请注意,您好奇的值 0xa000000007274733奇数 - 即设置了最低有效位。对象指针通常是偶数 - 查看您显示的其他指针。

奇值指针表明它可能是 Apple 的标记指针之一,其中数据直接存储在指针本身中,而不是分配对象。

r 的 Unicode 是 0x72,紧随其后的是 st。所以看起来您拥有其中字符的 Unicode。

Mike Ash 做了一个 good article在 2015 年的标记字符串上,尽管您的值似乎与他发现的方案不符。但是,我认为这是某种带标记的指针。

HTH

附录

我看到您编辑了问题以询问文字是在堆栈中还是堆中,这让我意识到您在询问 str1,哎呀。文字将位于“数据段”中,与代码位于同一内存区域。

要查看此内容,请尝试分配一个通用对象(一个 NSObject 可以,但不是一个 NSString ,它往往会得到特殊处理)以查看堆对象的去向,并获取 C 函数的地址以查看代码的去向。您可能会发现 str1 最接近后者。

关于ios - NSString 文字放在内存中的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47506950/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com