mempool.c: renamed from pool.c

To avoid confusion with pools in irep, we renamed region-based memory
manager from pool to mempool.

- rename pool.c to mempool.c
- separate mempool.h
- rename all mrb_pool to mrb_mempool

So if someone is using pool.c functions (I suppose no one does though),
they need to rename all `mrb_pool` to `mrb_mempool` and include
`mruby/mempool.h` header at the top.
This commit is contained in:
Yukihiro "Matz" Matsumoto
2024-10-29 11:11:52 +09:00
parent 62ef5db13e
commit 49525fa207
6 changed files with 55 additions and 47 deletions
+26 -25
View File
@@ -1,11 +1,12 @@
/*
** pool.c - memory pool
** mempool.c - memory pool
**
** See Copyright Notice in mruby.h
*/
#include <string.h>
#include <mruby.h>
#include <mruby/mempool.h>
/* configuration section */
/* allocated memory address should be multiple of POOL_ALIGNMENT */
@@ -30,8 +31,8 @@
#pragma warning(disable : 4200)
#endif
struct mrb_pool_page {
struct mrb_pool_page *next;
struct mrb_mempool_page {
struct mrb_mempool_page *next;
size_t offset;
size_t len;
void *last;
@@ -42,9 +43,9 @@ struct mrb_pool_page {
#pragma warning(pop)
#endif
struct mrb_pool {
struct mrb_mempool {
mrb_state *mrb;
struct mrb_pool_page *pages;
struct mrb_mempool_page *pages;
};
#undef TEST_POOL
@@ -60,10 +61,10 @@ struct mrb_pool {
# define ALIGN_PADDING(x) (0)
#endif
MRB_API mrb_pool*
mrb_pool_open(mrb_state *mrb)
MRB_API mrb_mempool*
mrb_mempool_open(mrb_state *mrb)
{
mrb_pool *pool = (mrb_pool*)mrb_malloc_simple(mrb, sizeof(mrb_pool));
mrb_mempool *pool = (mrb_mempool*)mrb_malloc_simple(mrb, sizeof(mrb_mempool));
if (pool) {
pool->mrb = mrb;
@@ -73,28 +74,28 @@ mrb_pool_open(mrb_state *mrb)
}
MRB_API void
mrb_pool_close(mrb_pool *pool)
mrb_mempool_close(mrb_mempool *pool)
{
struct mrb_pool_page *page;
struct mrb_mempool_page *page;
if (!pool) return;
page = pool->pages;
while (page) {
struct mrb_pool_page *tmp = page;
struct mrb_mempool_page *tmp = page;
page = page->next;
mrb_free(pool->mrb, tmp);
}
mrb_free(pool->mrb, pool);
}
static struct mrb_pool_page*
page_alloc(mrb_pool *pool, size_t len)
static struct mrb_mempool_page*
page_alloc(mrb_mempool *pool, size_t len)
{
struct mrb_pool_page *page;
struct mrb_mempool_page *page;
if (len < POOL_PAGE_SIZE)
len = POOL_PAGE_SIZE;
page = (struct mrb_pool_page*)mrb_malloc_simple(pool->mrb, sizeof(struct mrb_pool_page)+len);
page = (struct mrb_mempool_page*)mrb_malloc_simple(pool->mrb, sizeof(struct mrb_mempool_page)+len);
if (page) {
page->offset = 0;
page->len = len;
@@ -104,9 +105,9 @@ page_alloc(mrb_pool *pool, size_t len)
}
MRB_API void*
mrb_pool_alloc(mrb_pool *pool, size_t len)
mrb_mempool_alloc(mrb_mempool *pool, size_t len)
{
struct mrb_pool_page *page;
struct mrb_mempool_page *page;
if (!pool) return NULL;
len += ALIGN_PADDING(len);
@@ -129,13 +130,13 @@ mrb_pool_alloc(mrb_pool *pool, size_t len)
}
MRB_API void*
mrb_pool_realloc(mrb_pool *pool, void *p, size_t oldlen, size_t newlen)
mrb_mempool_realloc(mrb_mempool *pool, void *p, size_t oldlen, size_t newlen)
{
if (!pool) return NULL;
if (newlen < oldlen) return p;
oldlen += ALIGN_PADDING(oldlen);
newlen += ALIGN_PADDING(newlen);
for (struct mrb_pool_page *page = pool->pages; page; page = page->next) {
for (struct mrb_mempool_page *page = pool->pages; page; page = page->next) {
if (page->last == p) {
/* if p is a last allocation from the page */
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)
return p;
}
}
void *np = mrb_pool_alloc(pool, newlen);
void *np = mrb_mempool_alloc(pool, newlen);
if (np == NULL) {
return NULL;
}
@@ -165,17 +166,17 @@ int
main(void)
{
int i, len = 250;
mrb_pool *pool;
mrb_mempool *pool;
void *p;
pool = mrb_pool_open(NULL);
p = mrb_pool_alloc(pool, len);
pool = mrb_mempool_open(NULL);
p = mrb_mempool_alloc(pool, len);
for (i=1; i<20; i++) {
printf("%p (len=%d)\n", p, len);
p = mrb_pool_realloc(pool, p, len, len*2);
p = mrb_mempool_realloc(pool, p, len, len*2);
len *= 2;
}
mrb_pool_close(pool);
mrb_mempool_close(pool);
return 0;
}
#endif