0

我们正在尝试替换我们自己的 AES 实现以使用标准的 iOS AES 实现(请参阅如果我们使用我们自己的 AES 算法实现,我们的应用程序是否符合 FIPS 140-2?)。原始的 AES 实现在源数据缓冲区上加密和解密,因此没有新的分配/释放。使用标准的 iOS AES 实现,我们必须动态分配目标数据缓冲区的内存来加密/解密数据。我担心频繁的内存分配和释放会导致内存碎片。当前内存分配大小为 1K 到 8K 字节(取决于 iOS 磁盘扇区大小,将在特定设备上固定),因此应始终为 1K 的倍数。但是,这种分配/空闲会与其他大小的内存分配混淆,我担心这会产生大量内存碎片。

我们可以解决这个问题的一种方法是使用具有固定大小(实际上是 sqlite3 页面大小)的局部变量。唯一的问题是不同设备上的页面大小可能在 1K 到 8K 之间(取决于 iOS 磁盘扇区大小,但不确定 iOS 设备是否可以达到 8K),所以这意味着我必须分配一个 8K 本地每次缓冲,因为我需要在编译时分配这个大小。或者我总是只能分配一个较小的本地缓冲区,例如 2K 来处理大多数情况(在我的 iPhone 上是 1K),如果数据缓冲区大于 2K,我会使用动态分配。似乎也不理想。

我应该在这里担心这个吗?也许其他标准的加密 sqlite3 实现已经在进行频繁的内存分配/释放,所以我们在这里不会差多少?如果您知道任何见解,请在这里阐明一些观点。真的很感激。

4

0 回答 0