SQLite3利用函数sqlite3_column_blob来返回blob字段的内容的指针,并通过sqlite3_column_bytes来返回对应该字段的长度。
只是一直有一个疑问就是通过sqlite3_column_blob返回的二进制blob内容的内存是谁来释放,是由SQLite内部还是用调用者来释放。
后来仔细观察了内存变化发现,sqlite3_column_blob函数会预先分配一块内存,每次调用sqlite3_step然后sqlite3_column_blob字段内容的时候,都会在这一个指定的空间内写入,所以调用者不必去管理者块内存,也因此,每次sqlite3_column_blob返回的二进制内容都需重新写去到调用者需要的地方去,否则下次再有二进制读出的时候,原来的内容就会被释放掉。
本文探讨了SQLite3中blob字段的内存管理机制,详细解释了sqlite3_column_blob函数如何预分配内存并在此内存中写入blob内容,指出调用者无需管理这块内存,但需注意每次读取的blob内容应在使用前转移,以防被覆盖。
1219

被折叠的 条评论
为什么被折叠?



