草庐IT

信道分配

全部标签

c++ - 是否可以更改C/C++中自动变量的分配区域?

这是C和C++的理论问题。我有一个4x4矩阵类型,其定义非常简单:typedeffloatMatrix44[16];我还有很多方法将Matrix44作为参数,例如:boolmatrixIsIdentity(Matrix44m);我还有一个自定义的内存分配方案,即在堆上预分配大面积内存,然后我手动管理预取内存的分配。因此,我用自己的实现替换/重载了malloc/new。问题是,自定义malloc和new本质上都返回指针,而不是对象。通常,我会简单地执行以下操作://Method11]Matrix44mat={...};2]boolres=matrixIsIdentity(mat);但是,

c++ - 动态分配二维智能指针数组的语法

我需要动态分配一个二维智能指针数组,但它的语法让我感到困惑。我需要它是动态的:std::unique_ptrmyArray[size1][size2];因此据我了解,我创建了一个指向该类型指针的指针:someClass**myArray;//actaullythetypeisstd::unique_ptrbutI'lljustkeepitsimple然后分配它:myArray*=newsomeClass*[size1];for(inti=0;i但这并没有使用智能指针,这意味着我以后必须手动删除它,而且我不知道如何使这些指针成为智能指针;类型是std::unique_ptr但我需要一个指

c++ - 为 std::map 中的 std::array 分配多个值

当使用std::array时,我可以一次赋值:std::arraya2={1,2,3};但是当上面的数组组合成一个映射时,我不知道最好的方法:usingnamespacestd;map>myMap;//I'mdoingitlikebelownow...arraytempArray={1,2,3};//canIsavethislinesomehow?myMap[myString]=tempArray;如果这实际上是正确的方法,请告诉我。谢谢! 最佳答案 虽然使用另一个答案中所示的insert效率更高,但您也可以使用myMap["foo

c++ - Boost 进程间分配器 - 管理文件大小

首先,我将概述带有源的域。namespacebip=boost::interprocess;typedefbip::allocatorallocator;typedefbip::vectorvector;bip::managed_mapped_filem_file(open_or_create,"./file",constant_value);bip::allocatoralloc(m_file.get_segment_manager());bip::vector*vec=m_file.find_or_construct("vector")(alloc);我不关心底层文件的最终大小,但

c++ - C++中动态分配内存的碎片整理

动态分配内存(使用new和malloc运算符分配)的碎片整理在C++中如何工作? 最佳答案 C++堆中没有碎片整理,因为应用程序可以自由保留指向已分配内存的指针。因此堆管理器不能移动已经分配的内存。唯一可能的“碎片整理”是释放两个相邻的block。然后堆管理器会将这两个block组合成一个更大的空闲block,可以再次用于分配。 关于c++-C++中动态分配内存的碎片整理,我们在StackOverflow上找到一个类似的问题: https://stackove

c++ - 将 operator new 和 operator delete 与自定义内存池/分配器一起使用

我正在研究一个内存池/内存分配器实现,我正在一个庄园中设置它,只有一个特殊的“客户端”对象类型可以从池中提取。客户端可以直接构建到池中,或者它可以使用池进行动态内存调用,或者理论上它可以同时进行。我希望能够以调用我的池“alloc()”和“free()”函数的方式重载operatornew和operatordelete,以便获取构建对象所需的内存。我遇到的主要问题之一是让我的运算符(operator)删除以便能够通过调用我编写的pool->free()函数来释放内存。我想出了一个hack,通过将池传递到构造函数并让析构函数执行释放工作来修复它。这一切都很好而且花花公子,直到有人需要从这

c++ - 请问一台电脑 'know'是怎样分配的内存?

计算机在分配内存时,如何知道哪些字节已经被占用,不能被覆盖?因此,如果这些是一些未使用的内存字节:[0|0|0|0]计算机如何知道它们是否存在?它们可能只是一个等于零的整数。或者它可能是空的内存。它怎么知道的? 最佳答案 这取决于执行分配的方式,但它通常涉及对属于分配机制的数据的操作。当您在函数中分配一些变量时,分配是通过递减堆栈指针来执行的。通过堆栈指针,您的程序知道堆栈指针以下的任何内容都不会分配给堆栈,而堆栈指针以上的任何内容都已分配。当你通过malloc()等在堆上分配一些东西时,事情是相似的,但更复杂:所有这些分配器都有一

c++ - 使用 boost::pool 管理 std::vector 中的内存分配

我想要一个std::vector对象,使用boost::pool分配对象。这样的事情是否正确:classMyClass{private:doubledata;public:MyClass(doubled):data(d){}};intmain(){std::vector>vect;vect.push_back(4.5);vect.push_back(9.8);//Arethesebeingstoredinapoolnow?return0;}此代码有效,但我不完全确定原因。我对分配器的概念很陌生,但如果我理解正确的话,这就是告诉std::vector使用池而不是默认分配器,因此在vect

c++ - 为什么 valarray 分配不根据文档调整受让人的大小?

代码:#include#includeusingnamespacestd;intmain(){valarrayv0(2,4);valarrayv1;v1=v0;cout输出:v0.size:4v1.size:0v0[0]:2Segmentationfault对于作业:v1=v0;我认为构造函数:valarray&operator=(constvalarray&other);应该使用并根据documentation,我相信应该调整v1的大小并将v0的内容复制到其中,一个元素一个元素。那么实际发生了什么?$g++--versiong++(GCC)4.4.720120313(RedHat4.

c++ - STL 分配器和运算符 new[]

是否有使用operatornew[]的STL实现?作为分配器?在我的编译器上,生成Foo::operatornew[]private并没有阻止我创建vector...这种行为有任何保证吗? 最佳答案 C++标准,第20.4.1.1节。默认分配器allocate()函数使用全局运算符new:pointerallocate(size_typen,allocator::const_pointerhint=0);3Notes:Uses::operatornew(size_t)(18.4.1).