草庐IT

new_size

全部标签

c++ - 如何在可能使用 placement new 的同时创建数组

我一直致力于创建一个自定义分配器作为一项有趣的练习/实践,我在创建数组时遇到了两个潜在的问题。对于典型的分配调用,我将使用malloc和placementnew。但是,当我去创建一个数组时,我对应该如何完成感到困惑。有一次,我注意到在某些地方似乎placementnew对于数组(例如here)可能不安全.在尝试对数组使用placementnew时,我也遇到了自己的错误。我会得到错误`errorC2679:binary'=':nooperatorfoundwhichtakesaright-handoperandoftype'SomeClass*'(orthereisnoacceptabl

c++ - 是否可以使用 placement-new 来改变多态对象的类型?

是否可以使用placement-new来改变多态对象的类型?如果不是,标准中究竟禁止了什么?考虑这段代码:#includestructAnimal{Animal();virtual~Animal();virtualvoidbreathe();voidkill();void*data;};structDead:Animal{voidbreathe()override;};voidAnimal::kill(){this->~Animal();new(this)Dead;}调用“kill”合法吗?更新:根据此处显示的通过显式调用析构函数更改对象类型并为兼容的新对象应用placement-ne

c++ - c++ operator new[]/delete[] 是否调用 operator new/delete?

C++operatornew[]/delete[](不是我的)是否调用operatornew/delete?在我用自己的实现替换operatornew和operatordelete之后,下面的代码将调用它们:int*array=newint[3];delete[]array;并且当我也替换了operatornew[]和operatordelete[]时,上面的代码将只调用他们。我的运营商实现:void*operatornew(std::size_tblockSize){std::cout(block);blockSize=blockSize-sizeof(int);std::cout(

c++ - 通过new和allocator分配内存有什么区别

通过new/malloc和allocator分配内存有什么区别?如果我们有new和malloc选项,为什么我们还需要一个单独的vector内存分配器? 最佳答案 嗯,我觉得new和malloc是不一样的,allocator提供的功能不一样。malloc返回未初始化的数据,calloc返回零数据。但是如果你正在创建某个类的实例,new将调用构造函数(不是int、bool这些primitive类型,顺便说一句,也可以初始化)。delete会调用析构函数,而free不会。至于allocator,它为用户提供了一个抽象层。allocator

c++ - C++ 标准要求 new char[] 产生对齐内存的意图是什么?

根据C++03标准,5.3.4/10Forarraysofcharandunsignedchar,thedifferencebetweentheresultofthenew-expressionandtheaddressreturnedbytheallocationfunctionshallbeanintegralmultipleofthemoststringentalignmentrequirement(3.9)ofanyobjecttypewhosesizeisnogreaterthanthesizeofthearraybeingcreated.分配函数(operatornew[]

c++ - unsigned long vs size_t 导致函数重载失败

我定义了一个函数:voidmyfunc(size_tparam1,size_tparam2){...}它工作正常。但是当我尝试重载这个函数时voidmyfunc(unsignedlongparam1,unsignedlongparam2){...}编译失败,提示如下:错误:无法重载myfunc(unsignedlongparam1,unsignedlongparam2)。如何在不将输入参数静态转换为size_t的情况下解决这个问题?谢谢! 最佳答案 听起来size_t和unsignedlong在您的系统上是同一类型;编译器提示你有两

c++ - 覆盖 "new"并记录有关调用者的数据

我正在尝试编写一个内存分析器,到目前为止已经能够让我的自定义函数为malloc、free、new和delete工作。我尝试使用__FILE__和__LINE__将发起者记录在重载的新方法中,但(正如预期的那样)它只给出了重载函数所在位置的详细信息。有没有一种方法可以在不对被测试组件的现有代码进行任何更改的情况下获取有关重载函数的发起者的详细信息(例如#defineformalloc)?我使用的函数是:void*operatornew(size_tsize){if(b_MemProfStarted){b_MemProfStarted=false;o_MemLogFileboolb_Mem

c++ - 为什么哈希函数返回一个 size_t,它是如何使用的?

我了解哈希表的数学基础。我在下面有一个哈希函数(我在某处找到的):/*Fowler/Noll/Vo(FNV)Hash*/staticconstsize_tInitialFNV=2166136261U;staticconstsize_tFNVMultiple=16777619;size_tmyhash(conststring&s,intlength){size_thash=InitialFNV;for(size_ti=0;i为什么返回size_t?如何使用它来编写一个store()函数放置一个哈希表中的字符串?这如何适用于数组字符?关于#3,更换是否合适for循环和一个while循环在'

c++ - 增加 Stack Size 的缺点以及 Stack Commit 和 Reserve 之间的区别

我最近遇到了DinkumwareC++11的堆栈溢出问题库,到目前为止,我已经通过将StackCommit和StackReserve大小加倍来解决这个问题(我还没有遇到任何问题)。但是,我很好奇增加堆栈大小是否有任何缺点,而且,我不完全确定StackCommit和StackReserve之间的区别是什么(但是堆栈提交要小得多比堆栈保留)。 最佳答案 增加堆栈大小的明显后果是更多的内存使用。由于在大多数情况下堆栈与总内存相比并不大,所以这不是大问题。显然,如果有许多线程每个都使用大堆栈,那么这可能会占用机器中的大量可用内存-特别是如果

c++ - 链表 : Difference between "node* head=new node" and "node* head"

我正在创建一个由用户输入的大小为n的链接列表。在这里,当我刚刚初始化header时,输出是完美的,但是当我也声明它时,输出附加了两个零。对于size=5如果我写node*head=newnode;输出是432100,如果我只写node*head输出是43210。这是为什么?/*Iamcreatingalinklistofsizenenteredbyuser*File:main.cpp*Author:neha**CreatedonFebruary2,2014,12:39AM*/#include#include#include#includeusingnamespacestd;/***/u