草庐IT

new_size

全部标签

c++ - sizeof(size_t) 和 sizeof(ptrdiff_t) 什么时候可以不同?

什么时候可以sizeof(size_t)和sizeof(ptrdiff_t)有区别吗?有这方面的真实示例吗?注意,我知道所有标准都说这些类型是实现定义的。但是我知道的所有实现,sizeof(size_t)和sizeof(ptrdiff_t)等于。也许出于某些奇怪(或不太奇怪)的原因,它们可能会有所不同。看来,sizeof(ptrdiff_t)这不是一个非常有用的情况,因为指针运算对于大型数组来说非常有限。另一种情况,sizeof(ptrdiff_t)>sizeof(size_t)可能有点用处,因为所有指针减法都将在数组上定义(如果数组大于PTRDIFF_MAX,则指针减法将为所有远距离

c++ - Constexpr 替代 placement new 能够使内存中的对象保持未初始化状态?

我正在尝试创建一个静态容器,它具有基于堆栈的内存并且可以容纳T的N个实例。非常类似于std::vector我希望当前未使用的内存不包含T的初始化项。这通常可以通过placementnew来解决,但不可能在constexpr中使用。使用union我发现了一个技巧,您可以为此使用union,如下所示:templateunioncontainer_storage_type{structempty{};constexprcontainer_storage_type():uninitialized{}{}constexprcontainer_storage_type(value_typev):v

c++ - Protocol Buffer : no notation for fixed size buffers?

因为我在this上没有得到答案问题我必须制作原型(prototype)并检查自己,因为我的数据集header需要固定大小,所以我需要固定大小的字符串。那么,是否可以在ProtocolBuffer中指定固定大小的字符串或字节数组?这在这里不是很明显,而且我对强制将固定大小的字符串放入header消息中感到有点难过。--即std::string('\0',128);如果不是,我宁愿使用#pragmapack(1)structheader{...};'编辑问题间接回答here.会回答,除了 最佳答案 protobuf在协议(protoco

c++ new运算符通过libstdc++占用大量内存(67MB)

我对libstdc++中的new运算符有一些疑问。我用C++编写了一个程序,但在内存管理方面遇到了一些问题。在用gdb调试以确定是什么在消耗我的ram之后,我得到了以下infoprocmappingsMappedaddressspaces:StartAddrEndAddrSizeOffsetobjfile0x4000000x4040000x40000/home/sebastian/Developement/powerserverplus-svn/psp-job-distributor/Release/psp-job-distributor0x6040000x6050000x10000x

c++ - 在 'this' 指针上使用 placement new 是否安全

当前实现我有一个包含unique_ptr字段的类,这些字段相互依赖:classResourceManager{ResourceManager(){}ResourceManager(A*a_ptr):b_ptr(newB(a)),c_ptr(newC(b_ptr.get())){}ResourceManager&operator=(ResourceManager&&that){//Calldestructor,thenconstructanewinstanceontop~ResourceManager();ResourceManager*new_this=new(this)Resourc

c++ - boost::variant for boost::arrays of arbitrary size

我想本着的spirit创建一个boost::varianttypedefboost::variant,boost::array,boost::array,...>any_int_array;泛化为N作为模板的第二个值。换句话说,一个包含任意大小数组的boost::variant。这可能吗?请注意,在上面的示例中,boost::array是我的案例之一,但对于采用单个int的任何类,它都需要是一个可行的解决方案值作为模板参数。 最佳答案 既然你在谈论具有静态已知容量的类型,你就不能用一些模板元编程来解决这个问题吗?LiveonColi

c++ - 在没有 Malloc/New 或 Free/Delete 的情况下管理连续的内存块

如果没有C++中其他内存管理器(例如Malloc/New)的帮助,如何创建自定义MemoryManager来管理给定的连续内存块?这里有更多的上下文:MemManager::MemManager(void*memory,unsignedchartotalsize){Memory=memory;MemSize=totalsize;}我需要能够使用MemManager分配和释放此连续内存块。构造函数被赋予block的总大小(以字节为单位)。分配函数应以字节为单位获取所需的内存量,并返回指向该内存块开头的指针。如果没有内存剩余,则返回NULL指针。Deallocate函数应接收指向必须释放的

c++ - 如何在函数调用后初始化变量,就像 new 表达式提供的那样?

目前我正在研究自定义内存分配,其中一个缺点是我必须编写多行代码才能获得与new-expression相同的结果。仅提供一个简单的调用。简单的初始化:MyClass*obj=newMyClass(3.14);不太简单的初始化:void*obj_mem=alloc->Allocate(sizeofMyClass,alignof(MyClass));MyClass*obj=new(obj_mem)MyClass(3.14);我将向我的项目组提供分配器,例如那个分配器,并希望他们实际使用它们,而不是返回调用new,因为我们需要这些更快的分配器来管理我们的内存。但要实现这一点,我将不得不设计出最

如何检查角色是否是Rust中的Unicode New-Line字符(不仅是ASCII)?

每种编程语言都有自己的解释\n和\r。Unicode支持多个字符能够代表一条新线。从生锈的参考:空格逃脱是u+006e(n),u+0072(r)或u+0074(t)的字符之一,表示Unicode值U+000A(LF),U+000D(CR)或U+0009(HT)。基于该陈述,我会说如果它是一个新线角色,则是一个新的字符\n或者\r。在窗户上可能是\r和\n。我不确定。那以下呢?下一行字符(u+0085)线分离器字符(U+2028)段落分隔符(U+2029)我认为,我们缺少像char.is_new_line()。我看了看Unicode字符类别但找不到新线的定义。我是否必须提出自己对Unicode新

C++ 使用 "new"创建静态类数组或创建动态数组的另一种方法

我知道在C++中使用new创建动态数组的常用技术是:int*arr=newint[5];一本书还说:shorttell[10];//tellisanarrayof20bytescout现在我想知道是否有一种方法可以使用new为数组分配内存,这样它就可以分配给指向整个数组的指针。它可能看起来像这样:int(*p)[5]=newint[5];上面的例子是行不通的。左边在我看来是正确的。但是我不知道右边应该是什么。我的意图是了解这是否可能。我知道有std::vector和std::array。更新:这是我真正想检查的内容:int(*p1)[5]=(int(*)[5])newint[5];//