From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> To: tarantool-patches@dev.tarantool.org, alyapunov@tarantool.org, tsafin@tarantool.org Subject: [Tarantool-patches] [PATCH small 1/1] region: new region_alloc_array, updated alloc_object Date: Thu, 21 May 2020 22:32:04 +0200 [thread overview] Message-ID: <fc75e99f5b2a695c9f52db78198ea7ada7ef6a82.1590093078.git.v.shpilevoy@tarantool.org> (raw) Region's API provided a macro for aligned allocation of an object: region_alloc_object(). But not less frequent there is a case when need to allocate an array of objects, also aligned. The patch adds region_alloc_array() for that. Also the patch adds an out parameter 'size' for both macros. It simplifies total size calculation, which is needed almost always, because total size is included into an error message, if the allocation fails. Needed for https://github.com/tarantool/tarantool/issues/4609 --- Branch: http://github.com/tarantool/small/tree/gerold103/region_alloc_array Issue: https://github.com/tarantool/tarantool/issues/4609 small/region.h | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/small/region.h b/small/region.h index bea88c6..df6567d 100644 --- a/small/region.h +++ b/small/region.h @@ -386,10 +386,15 @@ struct RegionGuard { }; #endif /* __cplusplus */ -#define region_reserve_object(region, T) \ - (T *)region_aligned_reserve((region), sizeof(T), alignof(T)) - -#define region_alloc_object(region, T) \ - (T *)region_aligned_alloc((region), sizeof(T), alignof(T)) +#define region_alloc_object(region, T, size) ({ \ + *(size) = sizeof(T); \ + (T *)region_aligned_alloc((region), sizeof(T), alignof(T)); \ +}) + +#define region_alloc_array(region, T, count, size) ({ \ + int _tmp_ = sizeof(T) * (count); \ + *(size) = _tmp_; \ + (T *)region_aligned_alloc((region), _tmp_, alignof(T)); \ +}) #endif /* INCLUDES_TARANTOOL_SMALL_REGION_H */ -- 2.21.1 (Apple Git-122.3)
next reply other threads:[~2020-05-21 20:32 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-05-21 20:32 Vladislav Shpilevoy [this message] 2020-05-25 6:52 ` Aleksandr Lyapunov 2020-05-27 0:00 ` Vladislav Shpilevoy 2020-06-05 12:11 ` Timur Safin 2020-06-03 21:27 ` Vladislav Shpilevoy 2020-06-05 12:12 ` Timur Safin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=fc75e99f5b2a695c9f52db78198ea7ada7ef6a82.1590093078.git.v.shpilevoy@tarantool.org \ --to=v.shpilevoy@tarantool.org \ --cc=alyapunov@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --cc=tsafin@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH small 1/1] region: new region_alloc_array, updated alloc_object' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox