有什么方法可以从列中取出 blob 并将其所有权传递给其他人吗?当我从 sqlite3 表获取 blob(或其他类型的数据)时,我想避免额外的分配和 memcpy。
根据文档:
The pointers returned are valid until a type conversion occurs as described above, or until sqlite3_step() or sqlite3_reset() or sqlite3_finalize() is called. The memory space used to hold strings and BLOBs is freed automatically. Do not pass the pointers returned from sqlite3_column_blob(), sqlite3_column_text(), etc. into sqlite3_free().
例如: 我将位图对象作为 blob 存储在 sqlite 数据库中。当我在这个位图上有一个名为 setPixels 的方法时,它将指针的所有权传递给该位图。在当前的解决方案中,我为每个位图分配内存两次。一次是用 sqlite 从数据库中取出它时,第二次是在将新指针传递给位图时。
最佳答案
sqlite3_column_blob
返回的缓冲区是内部的;没有机制可以改变其所有权。
如果您的 blob 确实太大以至于缓冲区管理对性能产生影响,您可以 Open A BLOB For Incremental I/O和 Read Data From A BLOB Incrementally .
关于c - 从 sqlite db 获取 blob,无需 memcpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23780782/