问题标签 [allocator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ STL 内存分配器编译错误
我正在编写一个用于 STL 的 C++ 自定义分配器。当我将以下代码放入类定义中时,它会编译:
但是当我把它放在一个单独的 .cpp 文件中时,我得到了以下错误。我究竟做错了什么?错误出现在 static_cast 行上。
PT
memory-management - 是否可以在 MFC 应用程序的调试版本中替换内存分配器?
我想在 MFC 应用程序中使用Electric Fence 。我想跟踪new
/ delete
,如果我可以跟踪malloc
/free
那是额外的好处。
不幸的是,MFC 重新定义new
并且delete
- 但使用宏 (DEBUG_NEW) - 所以我不能使用标准 C++ 方法重新定义它们。(MFC 将它们定义为具有不同的签名,源文件和行号作为附加参数)。
有什么方法可以强制 all new
/ delete
s 通过我的分配器,并阻止 MFC 尝试获取这些分配器?
c++ - C++ STL 的扩展包装器 malloc 分配器
显然,gcc 提供了一个用于 STL 的“malloc_allocator”。它只是简单地包装了 malloc 和 free。还有一个用于内存不足处理程序的挂钩。我在哪里可以找到更多关于它的信息?我在哪里可以找到它的头文件?我正在使用 gcc 4.x。
c++ - 将分配器添加到 C++ 类模板以创建共享内存对象
简而言之,我的问题是:如果你有类,MyClass<T>
你怎么能改变类定义来支持你有的情况MyClass<T, Alloc>
,类似于 STL 向量提供的方式。
我需要这个功能来支持共享内存的分配器。具体来说,我正在尝试在共享内存中实现一个环形缓冲区。目前它有以下ctor:
其中ItemType
是要放置在缓冲区每个槽中的数据的类型。
现在,当我从主程序创建缓冲区时,这非常有用
但是,在这种情况下,缓冲区本身不是在共享内存中创建的,因此其他进程无法访问。我想做的是能够做类似的事情
但是,我不知道如何将显式分配器添加到类模板中。
c++ - 共享内存 STL 映射
我正在用 C++ 编写一个 Apache 模块。我需要将所有孩子需要读取的公共数据存储为共享内存的一部分。结构是一种向量映射,所以我想使用 STL 映射和向量。为此,我编写了一个共享分配器和一个共享管理器,它们适用于向量但不适用于映射,下面是示例:
当我尝试使用第二个对象 (spIndex) 时出现编译时错误,类似于:
../SpatialIndex.h:97: 错误:'((SpatialIndex*)this)->SpatialIndex::spIndex' 没有类类型
看起来编译器无法确定 SharedMap 模板类型的类型,这在我看来很奇怪,在我看来,所有模板参数都已指定。
你能帮我吗?
谢谢本韦努托
您好,感谢您的评论。
SpatialIndex 是包含容器的类,它基本上由容器(SharedMap spIndex;它是SpatialIndex 的成员)和两个方法update 和getData 组成。
在更新方法中,以下代码行给出了上面的编译器错误:
改变最后一行的 sintax 会改变编译器给出的错误,但基本上它说它无法理解 spIndex 是哪个类型变量,或者它找不到该类的适当重载构造函数。
c++ - 符合 C++ STL 的分配器
在处理小对象时,哪些分配器可用于 STL。我已经尝试过使用 Boost 中的池分配器,但没有得到性能提升(实际上,在某些情况下有相当大的性能下降)。
c++ - c ++将函数中的临时分配链接到自定义分配器?
我目前正在使用 c++ 开发一些简单的自定义分配器,这些分配器通常可以正常工作。我还重载了 new/delete 运算符以从我自己的分配器中分配内存。无论如何,我遇到了一些我真的不知道内存来自哪里的场景,如下所示:
在这种情况下,testObj 只会在函数内部有效,但它的内存从何而来?无论如何我可以将它链接到我的分配器吗?我是否必须使用 new 和 delete 创建对象,还是有其他方法?
谢谢
c++ - C++ 分配器,特别是将构造函数参数传递给使用 boost::interprocess::cached_adaptive_pool 分配的对象
这是一个令人尴尬的问题,但即使是 boost.interprocess 提供的编写良好的文档也不足以让我弄清楚如何做到这一点。
我拥有的是一个cached_adaptive_pool分配器实例,我想用它来构造一个对象,传递构造函数参数:
这很可能是我在一般情况下如何使用分配器对象方面的失败。但无论如何,我看不到如何使用这个特定的分配器,通过cached_adaptive_pool中指定的接口将构造函数参数传递给我的对象。
cached_adaptive_pool
有方法:void construct(const pointer & ptr, const_reference v)
但我不明白这意味着什么,我找不到使用它的例子。
我的头整天都在模板中游泳,所以即使答案很明显,也将不胜感激。
c++ - 没有可变参数模板的通用分配器类?
我正在尝试编写一个通用分配器类,它在空闲()时不会真正释放对象的内存,而是将其保存在队列中,如果请求新的对象,则返回先前分配的对象。现在,我无法理解的是如何在使用我的分配器时将参数传递给对象的构造函数(至少不诉诸可变参数模板)。我想出的 alloc() 函数如下所示:
尽管如此,我仍需要代码与当今的 C++(以及不支持可变参数模板的旧版本 GCC)兼容。有没有其他方法可以将任意数量的参数传递给对象构造函数?
c++ - 用于字符串的容量值
在 C++ 标准库中,std::string
有一个公共成员函数capacity()
,它返回内部分配存储的大小,该值大于或等于字符串中的字符数(根据此处)。这个值可以用来做什么?它与自定义分配器有关吗?