swift中字符串变量占用的内存

swift中字符串变量占用的内存,swift,Swift,我想查找字符串变量占用的内存(字节)。 假设我们有一个名为test的变量 let test = "abvd" 我想知道如何在运行时找到测试的大小 我查过详细情况了 但这个问题是不同的 据苹果公司称,“在幕后,Swift的原生字符串类型是由Unicode标量值构建而成的。Unicode标量是字符或修饰符的唯一21位数字,如拉丁小写字母A(“A”)的U+0061,或正面小鸡(”真正的目标是:这两种理解都不正确。字符串不承诺内部表示。它们可以包含各种表示,具体取决于它们的构造方式。原则上,如果它们在

我想查找字符串变量占用的内存(字节)。 假设我们有一个名为test的变量

let test = "abvd"
我想知道如何在运行时找到测试的大小

我查过详细情况了

但这个问题是不同的


据苹果公司称,“在幕后,Swift的原生字符串类型是由Unicode标量值构建而成的。Unicode标量是字符或修饰符的唯一21位数字,如拉丁小写字母A(“A”)的U+0061,或正面小鸡(”真正的目标是:这两种理解都不正确。字符串不承诺内部表示。它们可以包含各种表示,具体取决于它们的构造方式。原则上,如果它们在二进制文件中静态定义并映射到内存,则它们甚至可以获取零实际内存(我不记得
StaticString
类型是否充分利用了这个功能)。回答这个问题的唯一方法是查看当前的实现,从开始,然后移动到,然后读取其余的字符串文件

对于您的特定问题,这可能是您正在寻找的答案的开始(但同样,这是当前的实现;它不是任何规范的一部分):

你要寻找的答案的结尾是“很复杂。”

请注意,如果您要求提供
MemoryLayout.size(of value:test)
,您将得到一个令人惊讶的结果(24),因为这只是测量容器。容器中有一个引用类型(以一个字存储一个指针)。没有确定“此值使用的所有存储”的机制因为当涉及指针时,它的定义不是很好

String
只有一个属性:

var _core: _StringCore
\u StringCore
具有以下属性:

public var _baseAddress: UnsafeMutableRawPointer?
var _countAndFlags: UInt
public var _owner: AnyObject?

每一个都有一个字(64位平台上有8个字节)存储量,总共24字节。字符串的长度无关紧要。

您是在询问字符串的长度还是
字符串
变量引用使用的内存量?@rmaddy是变量使用的内存量,而不是字符串的长度,因此相当于C/Objective-C中的
sizeof
。@Murloc,这是不是这些的重复;这个问题是关于
test
所拥有的内存,而不是
test
的UTF-8视图的长度。在某些情况下,它们可能是相同的。在其他情况下,它们可能非常不同(并且没有关于它的承诺)@RobNapier OP的问题不太清楚。更新后的问题似乎与OP对我的第一条评论的回应不匹配。我对复制的建议是基于他们对我的评论的回应。但我同意这似乎与他们更新后的问题不匹配。谢谢你的解释。现在我可以告诉你NSMutableString需要多少钱吗内存?@ssowri1哪一部分需要多少内存?通常是每个字符2字节的数量,加上开销,但这取决于具体情况,而且不保证以特定的方式实现。(Swift实现只是更改了这么多字符串,需要的内存会更少,但仍然没有保证。)感谢您的回复。下面让我举两个例子。这样,我可以更清楚地了解它的内存管理。NSString*firstString=[[NSString alloc]initWithString:“ABCD”];NSMutableString*secondString=[[NSString alloc]initWithString:“ABCD”];///所以第一个字符串和第二个字符串都需要8个字节,正如您所说的每个字符2个字节。或者根据类型(NSString,NSMutableString)而有所不同?@SSWRI1第一个示例可能不需要内存,因为它具有短字符串优化或静态字符串优化。第二个示例(假设您输入了一个拼写错误,意思是
[NSMutableString alloc]
)大约需要8个字节加上一些开销(上次我查看时大约需要24个字节).但这些都没有承诺。你想解决什么问题?你可能想在任何情况下提出一个具体的问题。你有一个ObjC问题,快速回答的评论对其他搜索者都没有帮助。是的。这就是我问的。到目前为止,我没有遇到任何问题。但我想知道关于记忆的区别。我广告只通过目标C提问。这就是我和你们分享的原因。谢谢你们的支持。
public var _baseAddress: UnsafeMutableRawPointer?
var _countAndFlags: UInt
public var _owner: AnyObject?