~ubuntu-branches/ubuntu/wily/sqlite3/wily

« back to all changes in this revision

Viewing changes to c3ref/mem_methods.html

  • Committer: Package Import Robot
  • Author(s): Laszlo Boszormenyi (GCS)
  • Date: 2012-06-13 21:43:48 UTC
  • mto: This revision was merged to the branch mainline in revision 23.
  • Revision ID: package-import@ubuntu.com-20120613214348-uy14uupdeq0hh04k
Tags: upstream-3.7.13/www
Import upstream version 3.7.13, component www

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 
2
<html><head>
 
3
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
 
4
<title>Memory Allocation Routines</title>
 
5
<style type="text/css">
 
6
body {
 
7
    margin: auto;
 
8
    font-family: Verdana, sans-serif;
 
9
    padding: 8px 1%;
 
10
}
 
11
 
 
12
a { color: #044a64 }
 
13
a:visited { color: #734559 }
 
14
 
 
15
.logo { position:absolute; margin:3px; }
 
16
.tagline {
 
17
  float:right;
 
18
  text-align:right;
 
19
  font-style:italic;
 
20
  width:300px;
 
21
  margin:12px;
 
22
  margin-top:58px;
 
23
}
 
24
 
 
25
.toolbar {
 
26
  text-align: center;
 
27
  line-height: 1.6em;
 
28
  margin: 0;
 
29
  padding: 0px 8px;
 
30
}
 
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; }
 
34
 
 
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; }
 
39
 
 
40
/* rounded corners */
 
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 }
 
45
 
 
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. */
 
64
 
 
65
</style>
 
66
  
 
67
</head>
 
68
<body>
 
69
<div><!-- container div to satisfy validator -->
 
70
 
 
71
<a href="../index.html">
 
72
<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite Logo"
 
73
 border="0"></a>
 
74
<div><!-- IE hack to prevent disappearing logo--></div>
 
75
<div class="tagline">Small. Fast. Reliable.<br>Choose any three.</div>
 
76
 
 
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>
 
80
  <td width=100%>
 
81
  <div class="toolbar">
 
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>
 
89
  </div>
 
90
<script>
 
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"
 
97
  }
 
98
  function leavesearch() {
 
99
    var q = document.getElementById("q");
 
100
    if( q.value == "" ) { 
 
101
      q.value = gMsg
 
102
      q.style.color = "#044a64"
 
103
      q.style.fontStyle = "italic"
 
104
    }
 
105
  }
 
106
</script>
 
107
<td>
 
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">
 
113
    </form>
 
114
    </div>
 
115
  </table>
 
116
</div></div></div></div>
 
117
</td></tr></table>
 
118
<div class=startsearch></div>
 
119
  
 
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() */
 
130
};
 
131
</pre></blockquote><p>
 
132
An instance of this object defines the interface between SQLite
 
133
and low-level memory allocation routines.</p>
 
134
 
 
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>
 
144
 
 
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
 
152
conditions.</p>
 
153
 
 
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>
 
158
 
 
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>
 
162
 
 
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>
 
170
 
 
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>
 
177
 
 
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
 
187
serialization.</p>
 
188
 
 
189
<p>SQLite will never invoke xInit() more than once without an intervening
 
190
call to xShutdown().
 
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>