Tag: new operator

我可以用新的内存分配一块内存吗?

所以考虑到这个c结构: typedef struct { int* arr1; int* arr2; } myStruct; 这个答案描述了使用单个malloc同时分配myStruct和它的数组: myStruct* p = malloc(sizeof(*p) + 10 * sizeof(*p->arr1) + 10 * num * sizeof(*p->arr2); if(p != NULL) { p->arr1 = (int*)(p + 1); p->arr2 = p->arr1 + 10; } 我想知道有没有类似的方法来做到这一点? 显然,我希望能够分配到我在运行时收到的大小,就像使用C示例一样。

在混合C / C ++程序中调整malloc和new的“正确”方法是什么?

我有一个混合的C / C ++程序。 它包含一个以C / C为目标的flex / bison解析器,其余为C ++。 作为C,生成的解析器和扫描程序使用malloc , realloc和free管理它们的内存。 它们足以暴露钩子,允许我提交我自己的这些函数的实现。 正如您所料,(C ++)程序的其余部分“希望”使用new , delete等。 做一点研究似乎表明相关标准并不能保证这种混合应该起作用。 特别是C“堆”不一定是C ++“自由区”。 看来这两个方案可以互相践踏。 最重要的是,有一天(很快),该程序可能希望集成一个自定义的堆实现,例如tcmalloc ,由C和C ++使用。 在这里做什么是“正确”的事情? 鉴于需要集成tcmalloc(它解释了如何与C程序链接),我很想在C ++内存管理中找到一些跨类型,跨线程,跨所有重载/挂钩/任何内容。 有了这个,我可以将所有C ++分配/释放调用指回它们的C等价物(反过来又落在tcmalloc上。) 是否存在这样的泛星系全局C ++钩子? 可能它已经在做我想要的,类似于ios_base::sync_with_stdio默认秘密地与iostream和stdio结合? 我对谈论stdio与iostreams以及切换解析器生成器以及使用C ++ flex / bison骨架(它们引入独立的头痛)并不感兴趣。 编辑 :请包括支持您的答案的C ++标准的那些部分的名称。

为什么有一个特殊的new和删除数组?

使用delete而不是delete[]什么问题? 在分配和释放数组的过程中是否有一些特殊的事情发生? 为什么它与malloc和free不同?

如何将值存储在内存中的特定位置?

也许这是一个简单的问题,但我真的很想知道它。 如果我想在内存中的某个特定地址(堆中)存储一个值,比如一个int,我该怎么做? 说,我想将int值10存储在0x16。 我想通过调用new或malloc来做到这一点:int * p = new int(10); 然后我想将存储的值的地址设置为0x16。 起初我觉得像&p = 0x16这样的东西,但这不起作用。 我需要这样做以在内存中的某个值前面存储一些附加信息(之前通过malloc或new分配了内存空间)。 我正在使用Linux和C ++(但C也可以)。 我想要实现的是:一个进程调用大小为x的malloc,我想在分配的内存前面存储一个特定的值(大小),所以我可以稍后访问该大小(当调用free时)。 由于malloc被调用,我知道操作系统为该值分配空间的指针,我只想将指定内存的大小存储在指定内存前面的4个字节中。 我所做的(在我编写的malloc钩子中)是分配更多内存(通过内部mallok调用)但我还需要能够在特定位置存储此大小值。 我感谢所有的帮助。