c - 如何使用纯 C(而不是 C++)中的已知地址分配一 block 内存

标签 c memory

问题在主题名称中。如何使用已知地址分配内存?在 C++ 中,我们可以使用运算符 new(std::size_t, void* p) 的放置形式。如何用纯c完成它?

最佳答案

C++ 的 placement-new 运算符在给定地址(而不是内存本身)内分配对象,并调用其构造函数。

How to allocate a memory using known address?

那么它就不是内存分配了。您要么已经分配了内存(并且您知道有效位置的地址),要么根本没有分配内存(那么您没有该地址,或者该地址无效/em>)。

假设您已经拥有预分配内存块的地址,则您已经可以使用它:

struct MyStruct { int x; };

void* my_address = ...; // known and already allocated chunk of memory, e.g.
                        // - from stack: char mem[sizeof(MyStruct)]; -> mem
                        // - from heap:  malloc(sizeof(MyStruct));
                        // - any location that can be considered `valid'

struct MyStruct* my_struct = my_address;
my_struct->x = 1;

关于c - 如何使用纯 C(而不是 C++)中的已知地址分配一 block 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25699680/

相关文章:

无法写入 (2) 大于 2GB(最多 2TB)的文件

c - 根据规则排列对象所需的数据结构

c++ - 堆调试 : Assert failure in dbgdel in MS VC++ 2005

c++ - 新分配的先前数据会发生什么变化?

python - 变量赋值存储在内存中的什么位置?

c - 在 C 中使用 GTK 构建 GUI,使用基本的 Widgets 一切皆有可能吗?或者我应该建立一个自定义的?

将十六进制char数组转换为C中的u8数组

c++ - 错误 : 'CLOCK_MONOTONIC' undeclared (first use in this function)

c++ - 如何从极长的 C++ 字符串生成 char* kmers

c - 32位机器上 'double'结构成员的填充逻辑