【问题标题】:Get blob from sqllite db without memcpy从没有 memcpy 的 sqlite db 获取 blob
【发布时间】:2014-05-21 10:38:13
【问题描述】:

有没有办法从列中获取 blob 并将其所有权传递给其他人?当我从 sqlite3 表中获取 blob(或其他类型的数据)时,我想避免额外的分配和 memcpy。

根据文档:

在类型转换发生之前,返回的指针都是有效的 如上所述,或者直到 sqlite3_step() 或 sqlite3_reset() 或 sqlite3_finalize() 被调用。用于保存字符串的内存空间 并且 BLOB 会自动释放。不要传递返回的指针 从 sqlite3_column_blob()、sqlite3_column_text() 等进入 sqlite3_free().

例如: 我将位图对象存储为 sqlite db 中的 blob。当我在这个位图上有一个名为 setPixels 的方法时,它将指针的所有权传递给该位图。在当前解决方案中,我为每个位图分配内存两次。一次是使用 sqlite 从数据库中取出它,第二次是在将新指针传递给位图时。

【问题讨论】:

    标签: c sqlite memcpy


    【解决方案1】:

    sqlite3_column_blob 返回的缓冲区是内部的;没有改变其所有权的机制。

    如果您的 blob 真的太大以至于缓冲区管理会影响性能,您可以Open A BLOB For Incremental I/ORead Data From A BLOB Incrementally

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 2019-12-22
      • 2013-07-30
      相关资源
      最近更新 更多