1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
3
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
4
<title>Memory Allocation Routines</title>
5
<style type="text/css">
8
font-family: Verdana, sans-serif;
13
a:visited { color: #734559 }
15
.logo { position:absolute; margin:3px; }
31
.toolbar a { color: white; text-decoration: none; padding: 6px 12px; }
32
.toolbar a:visited { color: white; }
33
.toolbar a:hover { color: #044a64; background: white; }
35
.content { margin: 5%; }
36
.content dt { font-weight:bold; }
37
.content dd { margin-bottom: 25px; margin-left:20%; }
38
.content ul { padding:0px; padding-left: 15px; margin:0px; }
41
.se { background: url(../images/se.gif) 100% 100% no-repeat #044a64}
42
.sw { background: url(../images/sw.gif) 0% 100% no-repeat }
43
.ne { background: url(../images/ne.gif) 100% 0% no-repeat }
44
.nw { background: url(../images/nw.gif) 0% 0% no-repeat }
46
/* Things for "fancyformat" documents start here. */
47
.fancy img+p {font-style:italic}
48
.fancy .codeblock i { color: darkblue; }
49
.fancy h1,.fancy h2,.fancy h3,.fancy h4 {font-weight:normal;color:#044a64}
50
.fancy h2 { margin-left: 10px }
51
.fancy h3 { margin-left: 20px }
52
.fancy h4 { margin-left: 30px }
53
.fancy th {white-space:nowrap;text-align:left;border-bottom:solid 1px #444}
54
.fancy th, .fancy td {padding: 0.2em 1ex; vertical-align:top}
55
.fancy #toc a { color: darkblue ; text-decoration: none }
56
.fancy .todo { color: #AA3333 ; font-style : italic }
57
.fancy .todo:before { content: 'TODO:' }
58
.fancy p.todo { border: solid #AA3333 1px; padding: 1ex }
59
.fancy img { display:block; }
60
.fancy :link:hover, .fancy :visited:hover { background: wheat }
61
.fancy p,.fancy ul,.fancy ol { margin: 1em 5ex }
62
.fancy li p { margin: 1em 0 }
63
/* End of "fancyformat" specific rules. */
69
<div><!-- container div to satisfy validator -->
71
<a href="../index.html">
72
<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite Logo"
74
<div><!-- IE hack to prevent disappearing logo--></div>
75
<div class="tagline">Small. Fast. Reliable.<br>Choose any three.</div>
77
<table width=100% style="clear:both"><tr><td>
78
<div class="se"><div class="sw"><div class="ne"><div class="nw">
79
<table width=100% style="padding:0;margin:0;cell-spacing:0"><tr>
82
<a href="../about.html">About</a>
83
<a href="../sitemap.html">Sitemap</a>
84
<a href="../docs.html">Documentation</a>
85
<a href="../download.html">Download</a>
86
<a href="../copyright.html">License</a>
87
<a href="../news.html">News</a>
88
<a href="../support.html">Support</a>
91
gMsg = "Search SQLite Docs..."
92
function entersearch() {
93
var q = document.getElementById("q");
94
if( q.value == gMsg ) { q.value = "" }
95
q.style.color = "black"
96
q.style.fontStyle = "normal"
98
function leavesearch() {
99
var q = document.getElementById("q");
100
if( q.value == "" ) {
102
q.style.color = "#044a64"
103
q.style.fontStyle = "italic"
108
<div style="padding:0 1em 0px 0;white-space:nowrap">
109
<form name=f method="GET" action="http://www.sqlite.org/search">
110
<input id=q name=q type=text
111
onfocus="entersearch()" onblur="leavesearch()" style="width:24ex;padding:1px 1ex; border:solid white 1px; font-size:0.9em ; font-style:italic;color:#044a64;" value="Search SQLite Docs...">
112
<input type=submit value="Go" style="border:solid white 1px;background-color:#044a64;color:white;font-size:0.9em;padding:0 1ex">
116
</div></div></div></div>
118
<div class=startsearch></div>
120
<a href="intro.html"><h2>SQLite C Interface</h2></a><h2>Memory Allocation Routines</h2><blockquote><pre>typedef struct sqlite3_mem_methods sqlite3_mem_methods;
121
struct sqlite3_mem_methods {
122
void *(*xMalloc)(int); /* Memory allocation function */
123
void (*xFree)(void*); /* Free a prior allocation */
124
void *(*xRealloc)(void*,int); /* Resize an allocation */
125
int (*xSize)(void*); /* Return the size of an allocation */
126
int (*xRoundup)(int); /* Round up request size to allocation size */
127
int (*xInit)(void*); /* Initialize the memory allocator */
128
void (*xShutdown)(void*); /* Deinitialize the memory allocator */
129
void *pAppData; /* Argument to xInit() and xShutdown() */
131
</pre></blockquote><p>
132
An instance of this object defines the interface between SQLite
133
and low-level memory allocation routines.</p>
135
<p>This object is used in only one place in the SQLite interface.
136
A pointer to an instance of this object is the argument to
137
<a href="../c3ref/config.html">sqlite3_config()</a> when the configuration option is
138
<a href="../c3ref/c_config_getmalloc.html#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a> or <a href="../c3ref/c_config_getmalloc.html#sqliteconfiggetmalloc">SQLITE_CONFIG_GETMALLOC</a>.
139
By creating an instance of this object
140
and passing it to <a href="../c3ref/config.html">sqlite3_config</a>(<a href="../c3ref/c_config_getmalloc.html#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a>)
141
during configuration, an application can specify an alternative
142
memory allocation subsystem for SQLite to use for all of its
143
dynamic memory needs.</p>
145
<p>Note that SQLite comes with several <a href="../malloc.html#altalloc">built-in memory allocators</a>
146
that are perfectly adequate for the overwhelming majority of applications
147
and that this object is only useful to a tiny minority of applications
148
with specialized memory allocation requirements. This object is
149
also used during testing of SQLite in order to specify an alternative
150
memory allocator that simulates memory out-of-memory conditions in
151
order to verify that SQLite recovers gracefully from such
154
<p>The xMalloc, xRealloc, and xFree methods must work like the
155
malloc(), realloc() and free() functions from the standard C library.
156
SQLite guarantees that the second argument to
157
xRealloc is always a value returned by a prior call to xRoundup.</p>
159
<p>xSize should return the allocated size of a memory allocation
160
previously obtained from xMalloc or xRealloc. The allocated size
161
is always at least as big as the requested size but may be larger.</p>
163
<p>The xRoundup method returns what would be the allocated size of
164
a memory allocation given a particular requested size. Most memory
165
allocators round up memory allocations at least to the next multiple
166
of 8. Some allocators round up to a larger multiple or to a power of 2.
167
Every memory allocation request coming in through <a href="../c3ref/free.html">sqlite3_malloc()</a>
168
or <a href="../c3ref/free.html">sqlite3_realloc()</a> first calls xRoundup. If xRoundup returns 0,
169
that causes the corresponding memory allocation to fail.</p>
171
<p>The xInit method initializes the memory allocator. (For example,
172
it might allocate any require mutexes or initialize internal data
173
structures. The xShutdown method is invoked (indirectly) by
174
<a href="../c3ref/initialize.html">sqlite3_shutdown()</a> and should deallocate any resources acquired
175
by xInit. The pAppData pointer is used as the only parameter to
176
xInit and xShutdown.</p>
178
<p>SQLite holds the <a href="../c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_MASTER</a> mutex when it invokes
179
the xInit method, so the xInit method need not be threadsafe. The
180
xShutdown method is only called from <a href="../c3ref/initialize.html">sqlite3_shutdown()</a> so it does
181
not need to be threadsafe either. For all other methods, SQLite
182
holds the <a href="../c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_MEM</a> mutex as long as the
183
<a href="../c3ref/c_config_getmalloc.html#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a> configuration option is turned on (which
184
it is by default) and so the methods are automatically serialized.
185
However, if <a href="../c3ref/c_config_getmalloc.html#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a> is disabled, then the other
186
methods must be threadsafe or else make their own arrangements for
189
<p>SQLite will never invoke xInit() more than once without an intervening
191
</p><p>See also lists of
192
<a href="objlist.html">Objects</a>,
193
<a href="constlist.html">Constants</a>, and
194
<a href="funclist.html">Functions</a>.</p>