Swift堆栈/堆理解

我想不想要什么存储在堆栈/堆快速。 我有一个估计:你打印的所有内容和内存地址都不是这些值,它们存储在堆栈中,打印出来的值是堆中的值,基本上根据值和引用types。 我完全错了吗? 另外,你可以提供堆栈/堆的可视化表示吗?

正如juul所说的引用types存储在堆中,堆栈中的值…

这里我想解释为什么…

堆栈和堆?

堆栈用于静态内存分配,堆用于dynamic内存分配,都存储在计算机的RAM中。

分配在堆栈上的variables直接存储在内存中,访问这个内存非常快,编译时会处理分配。 当一个函数或一个方法调用另一个函数时,又调用另一个函数等等,所有这些函数的执行都会一直保持到最后一个函数返回值。 堆栈总是以LIFO顺序保留,最近保留的块始终是下一个要释放的块。 这使得跟踪堆栈非常简单,从堆栈释放一个块只不过是调整一个指针。

在这里输入图像说明

在堆上分配的variables在运行时分配内存,访问这个内存有点慢,但是堆大小只受虚拟内存大小的限制。 堆的元素彼此没有依赖关系,随时可以随机访问。 您可以随时分配一个块,随时释放它。 这使得在任何给定时间跟踪堆的哪些部分被分配或释放变得更加复杂。

类(引用types)分配在堆中,值types(如Struct,String,Int,Bool等)位于堆栈中。 请参阅此主题以获取更详细的答案: 为什么selectStruct Over Class?