Small. Fast. Reliable.
Choose any three.

SQLite C接口

内存分配例程

typedef struct sqlite3_mem_methods sqlite3_mem_methods;
struct sqlite3_mem_methods {
  无效*(* xMalloc)(int); / *内存分配功能* /
  void(* xFree)(void *); / *释放先前的分配* /
  无效*(* xRealloc)(void *,int); / *调整分配大小* /
  int(* xSize)(无效*); / *返回分配的大小* /
  int(* xRoundup)(int); / *将请求大小四舍五入为分配大小* /
  int(* xInit)(无效*); / *初始化内存分配器* /
  无效(* xShutdown)(无效*); / *取消初始化内存分配器* /
  无效* pAppData; / * xInit()和xShutdown()的参数* /
};

该对象的实例定义SQLite和低级内存分配例程之间的接口。

该对象仅在SQLite界面中的一个位置使用。当配置选项为SQLITE_CONFIG_MALLOCSQLITE_CONFIG_GETMALLOC时, 指向此对象实例的指针是sqlite3_config()的参数 。通过创建此对象的实例并将其在配置过程中传递给sqlite3_configSQLITE_CONFIG_MALLOC),应用程序可以为SQLite指定备用内存分配子系统,以用于其所有动态内存需求。

请注意,SQLite附带了几个内置的内存分配器 ,它们完全适合绝大多数应用程序,并且该对象仅对极少数具有特殊内存分配要求的应用程序有用。在SQLite的测试过程中也使用此对象,以指定模拟内存不足情况的备用内存分配器,以验证SQLite是否可以从此类情况正常恢复。

xMalloc,xRealloc和xFree方法必须像标准C库中的malloc(),realloc()和free()函数一样工作。SQLite保证xRealloc的第二个参数始终是先前调用xRoundup返回的值。

xSize应该返回先前从xMalloc或xRealloc获得的内存分配的分配大小。分配的大小始终至少与请求的大小一样大,但可能会更大。

xRoundup方法返回给定特定请求大小的内存分配的分配大小。大多数内存分配器将内存分配至少舍入到8的下一个整数倍。一些内存分配器将舍入到更大的整数倍或2的幂。每个通过sqlite3_malloc()sqlite3_realloc()传入的内存分配请求都首先调用xRoundup。如果xRoundup返回0,则导致相应的内存分配失败。

xInit方法初始化内存分配器。例如,它可能分配任何必需的互斥对象或初始化内部数据结构。xShutdown方法由sqlite3_shutdown()调用(间接), 并且应取消分配xInit获取的所有资源。pAppData指针用作xInit和xShutdown的唯一参数。

SQLite在调用xInit方法时会保留SQLITE_MUTEX_STATIC_MAIN互斥量,因此xInit方法不必是线程安全的。仅从sqlite3_shutdown()调用xShutdown方法,因此也不必是线程安全的。对于所有其他方法,只要打开SQLITE_CONFIG_MEMSTATUS配置选项(默认情况下),SQLite就会保留SQLITE_MUTEX_STATIC_MEM互斥体 ,因此这些方法会自动进行序列化。但是,如果禁用SQLITE_CONFIG_MEMSTATUS,则其他方法必须是线程安全的,否则请自行安排序列化。

如果没有对xShutdown()的中间调用,SQLite将永远不会多次调用xInit()。

另请参见 对象常量函数的列表