Ruby: include/ruby/internal/xmalloc.h Source File

Ruby 3.4.8p72 (2025-12-17 revision 995b59f66677d44767ce9faac6957e5543617ff9)

xmalloc.h
Go to the documentation of this file.
1#ifndef RBIMPL_XMALLOC_H /*-*-C++-*-vi:se ft=cpp:*/
2#define RBIMPL_XMALLOC_H
23#include "ruby/internal/config.h"
24
25#ifdef STDC_HEADERS
26# include <stddef.h>
27#endif
28
29#ifdef HAVE_STDLIB_H
30# include <stdlib.h>
31#endif
32
33#include "ruby/internal/attr/alloc_size.h"
34#include "ruby/internal/attr/nodiscard.h"
35#include "ruby/internal/attr/noexcept.h"
36#include "ruby/internal/attr/restrict.h"
37#include "ruby/internal/attr/returns_nonnull.h"
38#include "ruby/internal/dllexport.h"
39
49#ifndef USE_GC_MALLOC_OBJ_INFO_DETAILS
50# define USE_GC_MALLOC_OBJ_INFO_DETAILS 0
51#endif
52
53#define xmalloc ruby_xmalloc
54#define xmalloc2 ruby_xmalloc2
55#define xcalloc ruby_xcalloc
56#define xrealloc ruby_xrealloc
57#define xrealloc2 ruby_xrealloc2
58#define xfree ruby_xfree
60 RBIMPL_SYMBOL_EXPORT_BEGIN()
61
62 RBIMPL_ATTR_NODISCARD()
63 RBIMPL_ATTR_RESTRICT()
64 RBIMPL_ATTR_RETURNS_NONNULL()
65 RBIMPL_ATTR_ALLOC_SIZE((1))
86void *ruby_xmalloc(size_t size)
87 RBIMPL_ATTR_NOEXCEPT(malloc(size))
88;
89
90 RBIMPL_ATTR_NODISCARD()
91 RBIMPL_ATTR_RESTRICT()
92 RBIMPL_ATTR_RETURNS_NONNULL()
93 RBIMPL_ATTR_ALLOC_SIZE((1,2))
117void *ruby_xmalloc2(size_t nelems, size_t elemsiz)
118 RBIMPL_ATTR_NOEXCEPT(malloc(nelems * elemsiz))
119;
120
121 RBIMPL_ATTR_NODISCARD()
122 RBIMPL_ATTR_RESTRICT()
123 RBIMPL_ATTR_RETURNS_NONNULL()
124 RBIMPL_ATTR_ALLOC_SIZE((1,2))
147void *ruby_xcalloc(size_t nelems, size_t elemsiz)
148 RBIMPL_ATTR_NOEXCEPT(calloc(nelems, elemsiz))
149;
150
151 RBIMPL_ATTR_NODISCARD()
152 RBIMPL_ATTR_RETURNS_NONNULL()
153 RBIMPL_ATTR_ALLOC_SIZE((2))
193void *ruby_xrealloc(void *ptr, size_t newsiz)
194 RBIMPL_ATTR_NOEXCEPT(realloc(ptr, newsiz))
195;
196
197 RBIMPL_ATTR_NODISCARD()
198 RBIMPL_ATTR_RETURNS_NONNULL()
199 RBIMPL_ATTR_ALLOC_SIZE((2,3))
250void *ruby_xrealloc2(void *ptr, size_t newelems, size_t newsiz)
251 RBIMPL_ATTR_NOEXCEPT(realloc(ptr, newelems * newsiz))
252;
253
282void ruby_xfree(void *ptr)
283 RBIMPL_ATTR_NOEXCEPT(free(ptr))
284;
285
286 RBIMPL_SYMBOL_EXPORT_END()
287
288#endif /* RBIMPL_XMALLOC_H */
alloc_size.h
Defines RBIMPL_ATTR_ALLOC_SIZE.
RBIMPL_ATTR_ALLOC_SIZE
#define RBIMPL_ATTR_ALLOC_SIZE(tuple)
Wraps (or simulates) __attribute__((alloc_size))
Definition alloc_size.h:29
dllexport.h
Tweaking visibility of C variables/functions.
RBIMPL_SYMBOL_EXPORT_END
#define RBIMPL_SYMBOL_EXPORT_END()
Counterpart of RBIMPL_SYMBOL_EXPORT_BEGIN.
Definition dllexport.h:74
RBIMPL_SYMBOL_EXPORT_BEGIN
#define RBIMPL_SYMBOL_EXPORT_BEGIN()
Shortcut macro equivalent to RUBY_SYMBOL_EXPORT_BEGIN extern "C" {.
Definition dllexport.h:65
nodiscard.h
Defines RBIMPL_ATTR_NODISCARD.
RBIMPL_ATTR_NODISCARD
#define RBIMPL_ATTR_NODISCARD()
Wraps (or simulates) [[nodiscard]].
Definition nodiscard.h:42
noexcept.h
Defines RBIMPL_ATTR_NOEXCEPT.
RBIMPL_ATTR_NOEXCEPT
#define RBIMPL_ATTR_NOEXCEPT(_)
Wraps (or simulates) C++11 noexcept
Definition noexcept.h:85
restrict.h
Defines RBIMPL_ATTR_RESTRICT.
RBIMPL_ATTR_RESTRICT
#define RBIMPL_ATTR_RESTRICT()
Wraps (or simulates) __declspec(restrict)
Definition restrict.h:41
returns_nonnull.h
Defines RBIMPL_ATTR_RETURNS_NONNULL.
RBIMPL_ATTR_RETURNS_NONNULL
#define RBIMPL_ATTR_RETURNS_NONNULL()
Wraps (or simulates) __attribute__((returns_nonnull))
Definition returns_nonnull.h:34
ruby_xrealloc
void * ruby_xrealloc(void *ptr, size_t newsiz)
Resize the storage instance.
Definition gc.c:4656
ruby_xrealloc2
void * ruby_xrealloc2(void *ptr, size_t newelems, size_t newsiz)
Identical to ruby_xrealloc(), except it resizes the given storage instance to newelems * newsiz bytes...
Definition gc.c:4680
ruby_xfree
void ruby_xfree(void *ptr)
Deallocates a storage instance.
Definition gc.c:4705
ruby_xmalloc2
void * ruby_xmalloc2(size_t nelems, size_t elemsiz)
Identical to ruby_xmalloc(), except it allocates nelems * elemsiz bytes.
Definition gc.c:4609
ruby_xmalloc
void * ruby_xmalloc(size_t size)
Allocates a storage instance.
Definition gc.c:4583
ruby_xcalloc
void * ruby_xcalloc(size_t nelems, size_t elemsiz)
Identical to ruby_xmalloc2(), except it returns a zero-filled storage instance.
Definition gc.c:4623