GitHub

@@ -1,11 +1,12 @@

11

/*

2-

** pool.c - memory pool

2+

** mempool.c - memory pool

33

**

44

** See Copyright Notice in mruby.h

55

*/

6677

#include <string.h>

88

#include <mruby.h>

9+

#include <mruby/mempool.h>

9101011

/* configuration section */

1112

/* allocated memory address should be multiple of POOL_ALIGNMENT */

@@ -30,8 +31,8 @@

3031

#pragma warning(disable : 4200)

3132

#endif

323333-

struct mrb_pool_page {

34-

struct mrb_pool_page *next;

34+

struct mrb_mempool_page {

35+

struct mrb_mempool_page *next;

3536

size_t offset;

3637

size_t len;

3738

void *last;

@@ -42,9 +43,9 @@ struct mrb_pool_page {

4243

#pragma warning(pop)

4344

#endif

444545-

struct mrb_pool {

46+

struct mrb_mempool {

4647

mrb_state *mrb;

47-

struct mrb_pool_page *pages;

48+

struct mrb_mempool_page *pages;

4849

};

49505051

#undef TEST_POOL

@@ -60,10 +61,10 @@ struct mrb_pool {

6061

# define ALIGN_PADDING(x) (0)

6162

#endif

626363-

MRB_API mrb_pool*

64-

mrb_pool_open(mrb_state *mrb)

64+

MRB_API mrb_mempool*

65+

mrb_mempool_open(mrb_state *mrb)

6566

{

66-

mrb_pool *pool = (mrb_pool*)mrb_malloc_simple(mrb, sizeof(mrb_pool));

67+

mrb_mempool *pool = (mrb_mempool*)mrb_malloc_simple(mrb, sizeof(mrb_mempool));

67686869

if (pool) {

6970

pool->mrb = mrb;

@@ -73,28 +74,28 @@ mrb_pool_open(mrb_state *mrb)

7374

}

74757576

MRB_API void

76-

mrb_pool_close(mrb_pool *pool)

77+

mrb_mempool_close(mrb_mempool *pool)

7778

{

78-

struct mrb_pool_page *page;

79+

struct mrb_mempool_page *page;

79808081

if (!pool) return;

8182

page = pool->pages;

8283

while (page) {

83-

struct mrb_pool_page *tmp = page;

84+

struct mrb_mempool_page *tmp = page;

8485

page = page->next;

8586

mrb_free(pool->mrb, tmp);

8687

}

8788

mrb_free(pool->mrb, pool);

8889

}

899090-

static struct mrb_pool_page*

91-

page_alloc(mrb_pool *pool, size_t len)

91+

static struct mrb_mempool_page*

92+

page_alloc(mrb_mempool *pool, size_t len)

9293

{

93-

struct mrb_pool_page *page;

94+

struct mrb_mempool_page *page;

94959596

if (len < POOL_PAGE_SIZE)

9697

len = POOL_PAGE_SIZE;

97-

page = (struct mrb_pool_page*)mrb_malloc_simple(pool->mrb, sizeof(struct mrb_pool_page)+len);

98+

page = (struct mrb_mempool_page*)mrb_malloc_simple(pool->mrb, sizeof(struct mrb_mempool_page)+len);

9899

if (page) {

99100

page->offset = 0;

100101

page->len = len;

@@ -104,9 +105,9 @@ page_alloc(mrb_pool *pool, size_t len)

104105

}

105106106107

MRB_API void*

107-

mrb_pool_alloc(mrb_pool *pool, size_t len)

108+

mrb_mempool_alloc(mrb_mempool *pool, size_t len)

108109

{

109-

struct mrb_pool_page *page;

110+

struct mrb_mempool_page *page;

110111111112

if (!pool) return NULL;

112113

len += ALIGN_PADDING(len);

@@ -129,13 +130,13 @@ mrb_pool_alloc(mrb_pool *pool, size_t len)

129130

}

130131131132

MRB_API void*

132-

mrb_pool_realloc(mrb_pool *pool, void *p, size_t oldlen, size_t newlen)

133+

mrb_mempool_realloc(mrb_mempool *pool, void *p, size_t oldlen, size_t newlen)

133134

{

134135

if (!pool) return NULL;

135136

if (newlen < oldlen) return p;

136137

oldlen += ALIGN_PADDING(oldlen);

137138

newlen += ALIGN_PADDING(newlen);

138-

for (struct mrb_pool_page *page = pool->pages; page; page = page->next) {

139+

for (struct mrb_mempool_page *page = pool->pages; page; page = page->next) {

139140

if (page->last == p) {

140141

/* if p is a last allocation from the page */

141142

size_t beg = (char*)p - page->page;

@@ -152,7 +153,7 @@ mrb_pool_realloc(mrb_pool *pool, void *p, size_t oldlen, size_t newlen)

152153

return p;

153154

}

154155

}

155-

void *np = mrb_pool_alloc(pool, newlen);

156+

void *np = mrb_mempool_alloc(pool, newlen);

156157

if (np == NULL) {

157158

return NULL;

158159

}

@@ -165,17 +166,17 @@ int

165166

main(void)

166167

{

167168

int i, len = 250;

168-

mrb_pool *pool;

169+

mrb_mempool *pool;

169170

void *p;

170171171-

pool = mrb_pool_open(NULL);

172-

p = mrb_pool_alloc(pool, len);

172+

pool = mrb_mempool_open(NULL);

173+

p = mrb_mempool_alloc(pool, len);

173174

for (i=1; i<20; i++) {

174175

printf("%p (len=%d)\n", p, len);

175-

p = mrb_pool_realloc(pool, p, len, len*2);

176+

p = mrb_mempool_realloc(pool, p, len, len*2);

176177

len *= 2;

177178

}

178-

mrb_pool_close(pool);

179+

mrb_mempool_close(pool);

179180

return 0;

180181

}

181182

#endif

Read the original on github.com ↗