Swift:如何确保代码没有优化?

时间:2015-08-26 10:54:49

标签: swift compiler-optimization volatile

我想将Swift中UnsafeMutablePointer的内容清零。

在C中你通常会有这样的东西:

void freeSecure(void *buffer, uint64_t size) {
    // Create volatile pointer to make sure that the code won't be optimized away
    volatile uint8_t *ptr = buffer;
    for (uint64_t i = 0; i < size; i++) ptr[i] = 0x00;
    free(buffer);
}

如何在Swift中实现同样的目标?

// Is extension of `UnsafeMutablePointer`
public func KC_dealloc(allocated: Int) {
    if num == 0 {
        self.destroy()
        self.dealloc(allocated)
        return
    }

    let byteCount = sizeof(Memory) * allocated
    let ptr = UnsafeMutablePointer<UInt8>(self) // volatile???
    for var i = 0; i < byteCount; i++ {
        ptr[i] = 0x00
    }
    self.destroy()
    self.dealloc(allocated)
}

1 个答案:

答案 0 :(得分:0)

好的,我在Apple-developer-forum中提出了同样的问题,那里的一些人向我指出了memset_s - 这就是我想要的功能。

所以我的Swift代码应该是这样的:

// Is extension of `UnsafeMutablePointer`
public func KC_dealloc(allocated: Int) {
    if num == 0 {
        self.destroy()
        self.dealloc(allocated)
        return
    }

    let byteCount = sizeof(Memory) * allocated
    let ptr = UnsafeMutablePointer<UInt8>(self) // volatile???
    memset_s(ptr, byteCount, 0x00, byteCount) // Defined in C11
    self.destroy()
    self.dealloc(allocated)
}