新(3)是什么意思?
What does new(3) mean?
SelectInst *Sel = new(3) SelectInst(C, S1, S2, NameStr, InsertBefore);
这里的new
运算符是什么意思?
new
运算符后的数字 3
是什么意思?
在 doc 上,它表示这是要请求的内存量(以字节为单位)。 (如果没有超载)
这是一个 3 * 8 = 24 位的请求,用于将对象存储在内存中。
在 malloc 的某种残余中考虑这一点。
假设SelectInst
提供了一个用户定义的placement operator new,它接受一个int
作为用户定义的参数;调用语法意味着使用用户定义的位置 operator new
进行内存分配。例如
class SelectInst {
public:
static void* operator new (std::size_t count, int args) {
// ~~~~~~~~
...
}
};
SelectInst *Sel = new(3) SelectInst(C, S1, S2, NameStr, InsertBefore);
// ~~~
您可能在 SelectInst
或全局范围内有自定义运算符 new(类似于 placement new):
struct SelectInst
{
SelectInst(/*...*/);
// ...
static void* operator new(std::size_t sz, int custom);
static void operator delete(void* ptr, int custom); // new counter part
};
或
void* operator new(std::size_t sz, int custom);
void operator delete(void* ptr, int custom); // new counter part
查看 operator_new
的最后一部分
此代码来自LLVM's codebase。
有一个习惯 operator new
in scope and it is being used to placement-new initialize the objects (cfr. placement syntax)
void *User::operator new(size_t Size, unsigned Us) {
return allocateFixedOperandUser(Size, Us, 0);
}
这是一个玩具示例:
class SelectInst
{
public:
int x;
};
void *operator new(size_t Size, unsigned Us) {
^^^^^^^^^^^ 3 is passed here
^^^^^^^^^^^ allocation size requested
return ... // Allocates enough space for Size and for Us uses
}
SelectInst *Create() {
return new(3) SelectInst();
}
int main()
{
auto ptr = Create();
return 0;
}
特别是该代码用于调整分配的 space 以适应其他数据。
SelectInst *Sel = new(3) SelectInst(C, S1, S2, NameStr, InsertBefore);
这里的new
运算符是什么意思?
new
运算符后的数字 3
是什么意思?
在 doc 上,它表示这是要请求的内存量(以字节为单位)。 (如果没有超载) 这是一个 3 * 8 = 24 位的请求,用于将对象存储在内存中。 在 malloc 的某种残余中考虑这一点。
假设SelectInst
提供了一个用户定义的placement operator new,它接受一个int
作为用户定义的参数;调用语法意味着使用用户定义的位置 operator new
进行内存分配。例如
class SelectInst {
public:
static void* operator new (std::size_t count, int args) {
// ~~~~~~~~
...
}
};
SelectInst *Sel = new(3) SelectInst(C, S1, S2, NameStr, InsertBefore);
// ~~~
您可能在 SelectInst
或全局范围内有自定义运算符 new(类似于 placement new):
struct SelectInst
{
SelectInst(/*...*/);
// ...
static void* operator new(std::size_t sz, int custom);
static void operator delete(void* ptr, int custom); // new counter part
};
或
void* operator new(std::size_t sz, int custom);
void operator delete(void* ptr, int custom); // new counter part
查看 operator_new
的最后一部分此代码来自LLVM's codebase。
有一个习惯 operator new
in scope and it is being used to placement-new initialize the objects (cfr. placement syntax)
void *User::operator new(size_t Size, unsigned Us) {
return allocateFixedOperandUser(Size, Us, 0);
}
这是一个玩具示例:
class SelectInst
{
public:
int x;
};
void *operator new(size_t Size, unsigned Us) {
^^^^^^^^^^^ 3 is passed here
^^^^^^^^^^^ allocation size requested
return ... // Allocates enough space for Size and for Us uses
}
SelectInst *Create() {
return new(3) SelectInst();
}
int main()
{
auto ptr = Create();
return 0;
}
特别是该代码用于调整分配的 space 以适应其他数据。