在swift 3中,我使用MemoryLayout来获取String Struct的大小。 结果取决于系统架构:12字节32位操作系统和24字节64位操作系统。
对于固定大小,如何存储任意大小的字符串? (请记住,String是Struct类型)以及系统架构之间String的大小差异是什么?
答案 0 :(得分:1)
如果您想了解String
的内幕,那么您可以直接查看source code
归结为struct
的内部结构,其中包含另一个名为_SwiftCore
的struct
。反过来,它有一个指向内存的原始指针,实际存储String
的数据。由于这种设计,所有struct
需要存储的是一个指针和一些关于存储的其他数据,因此struct
的大小不是存储数据的真实大小。您必须追踪原始存储空间才能确定整个String
的实际尺寸。
大部分内容对于String
的日常使用并不重要,它是一个实现细节,并不是理解如何使用它的必要条件。事实上,实施可以通过多种方式完成,但仍然大致相同。不要依赖任何这些内部细节,而是依赖面向公众的界面和文档。实施可能会从版本到版本,基础设施到基础设施发生根本变化,因此根据它可能会导致严重的问题。