The memory layout of a type, describing its size, stride, and alignment.

    @frozen enum MemoryLayout<T>

    You can use MemoryLayout as a source of information about a type when allocating or binding memory using raw pointers. The following example declares a Point type with x and y coordinates and a Boolean isFilled property.

    struct Point {
        let x: Double
        let y: Double
        let isFilled: Bool

    The size, stride, and alignment of the Point type are accessible as static properties of MemoryLayout<Point>.

    // MemoryLayout<Point>.size == 17
    // MemoryLayout<Point>.stride == 24
    // MemoryLayout<Point>.alignment == 8

    Always use a multiple of a type’s stride instead of its size when allocating memory or accounting for the distance between instances in memory. This example allocates uninitialized raw memory with space for four instances of Point.

    let count = 4
    let pointPointer = UnsafeMutableRawPointer.allocate(
            byteCount: count * MemoryLayout<Point>.stride,
            alignment: MemoryLayout<Point>.alignment)

    Citizens in Swift


    • protocol Sendable

      A type whose values can safely be passed across concurrency domains by copying.


    Available in _RegexParser