SimpleKernel
1.17.0
Loading...
Searching...
No Matches
kstd_new.cpp
Go to the documentation of this file.
1
5
#include <cstddef>
6
#include <new>
7
8
#include "
sk_stdlib.h
"
9
10
void
*
operator
new
(
size_t
size) {
11
if
(size == 0) {
12
size = 1;
13
}
14
return
malloc
(size);
15
}
16
17
void
*
operator
new
[](
size_t
size) {
18
if
(size == 0) {
19
size = 1;
20
}
21
return
malloc
(size);
22
}
23
24
void
*
operator
new
(
size_t
size,
size_t
alignment)
noexcept
{
25
if
(size == 0) {
26
size = 1;
27
}
28
29
// 确保对齐参数是 2 的幂
30
if
(alignment == 0 || (alignment & (alignment - 1)) != 0) {
31
return
nullptr
;
32
}
33
34
// 如果对齐要求小于等于默认对齐,使用普通 malloc
35
if
(alignment <=
alignof
(std::max_align_t)) {
36
return
malloc
(size);
37
}
38
39
return
aligned_alloc
(alignment, size);
40
}
41
42
void
*
operator
new
[](
size_t
size,
size_t
alignment)
noexcept
{
43
if
(size == 0) {
44
size = 1;
45
}
46
47
// 确保对齐参数是 2 的幂
48
if
(alignment == 0 || (alignment & (alignment - 1)) != 0) {
49
return
nullptr
;
50
}
51
52
// 如果对齐要求小于等于默认对齐,使用普通 malloc
53
if
(alignment <=
alignof
(std::max_align_t)) {
54
return
malloc
(size);
55
}
56
57
return
aligned_alloc
(alignment, size);
58
}
59
60
void
*
operator
new
(
size_t
size, std::align_val_t alignment) {
61
return
operator
new
(size,
static_cast<
size_t
>
(alignment));
62
}
63
64
void
*
operator
new
[](
size_t
size, std::align_val_t alignment) {
65
return
operator
new
[](size,
static_cast<
size_t
>
(alignment));
66
}
67
68
auto
operator
delete
(
void
* ptr)
noexcept
->
void
{
69
if
(ptr !=
nullptr
) {
70
free
(ptr);
71
}
72
}
73
74
auto
operator
delete
(
void
* ptr, size_t)
noexcept
->
void
{
75
if
(ptr !=
nullptr
) {
76
free
(ptr);
77
}
78
}
79
80
auto
operator
delete
[](
void
* ptr)
noexcept
->
void
{
81
if
(ptr !=
nullptr
) {
82
free
(ptr);
83
}
84
}
85
86
auto
operator
delete
[](
void
* ptr, size_t)
noexcept
->
void
{
87
if
(ptr !=
nullptr
) {
88
free
(ptr);
89
}
90
}
91
92
auto
operator
delete
(
void
* ptr, size_t, size_t)
noexcept
->
void
{
93
if
(ptr !=
nullptr
) {
94
aligned_free
(ptr);
95
}
96
}
97
98
auto
operator
delete
[](
void
* ptr, size_t, size_t)
noexcept
->
void
{
99
if
(ptr !=
nullptr
) {
100
aligned_free
(ptr);
101
}
102
}
103
104
auto
operator
delete
(
void
* ptr, std::align_val_t)
noexcept
->
void
{
105
if
(ptr !=
nullptr
) {
106
aligned_free
(ptr);
107
}
108
}
109
110
auto
operator
delete
[](
void
* ptr, std::align_val_t)
noexcept
->
void
{
111
if
(ptr !=
nullptr
) {
112
aligned_free
(ptr);
113
}
114
}
115
116
auto
operator
delete
(
void
* ptr, size_t, std::align_val_t)
noexcept
->
void
{
117
if
(ptr !=
nullptr
) {
118
aligned_free
(ptr);
119
}
120
}
121
122
auto
operator
delete
[](
void
* ptr, size_t, std::align_val_t)
noexcept
->
void
{
123
if
(ptr !=
nullptr
) {
124
aligned_free
(ptr);
125
}
126
}
sk_stdlib.h
aligned_free
void aligned_free(void *ptr)
Definition
memory.cpp:65
aligned_alloc
void * aligned_alloc(size_t alignment, size_t size)
Definition
memory.cpp:58
malloc
void * malloc(size_t size)
Definition
memory.cpp:31
free
void free(void *ptr)
Definition
memory.cpp:38
src
libcxx
kstd_new.cpp
Generated by
1.9.8