2015-08-26 2 views
1

Я хочу обнулить содержимое UnsafeMutablePointer в Swift.Swift: Как убедиться, что код не оптимизирован?

В 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) 
} 
+0

Пытались это вы? – nhgrif

+0

Это мой фактический код, но я не знаю, действительно ли он обнуляет данные или удаляет часть, потому что данные больше не будут прочитаны ... –

ответ

1

Хорошо, я задал тот же самый вопрос в Apple-разработчиков-форум и какой-то парень там указал мне на 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) 
} 
Смежные вопросы