草庐IT

new_value

全部标签

c++ - malloc/new 是否从缓存或 RAM 返回内存块?

我想知道malloc/new是否从缓存或RAM返回内存块。提前致谢。 最佳答案 当作为操作系统中的进程生活时,您对所有这些都是抽象的,您只获得内存。您不必为此担心,操作系统会为您管理所有这些,而内存单元会将事物从一个转移到另一个。但是您仍然看到一个单一的虚拟内存布局。 关于c++-malloc/new是否从缓存或RAM返回内存块?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1

c++ - 编码练习 : return by value or by reference in Matrix multiplication?

我正在引用thisone写这个问题我昨天写的。在一些文档之后,我似乎很清楚我想做的事情(以及我认为可能的事情)几乎是不可能的,如果不是根本不可能的话。有几种实现它的方法,由于我不是经验丰富的程序员,我问你会选择哪一种。我再次解释了我的问题,但现在我有一些解决方案可以探索。我需要什么我有一个Matrix类,我想实现矩阵之间的乘法,这样类的使用非常直观:Matrixa(5,2);a(4,1)=6;a(3,1)=9.4;...//Andsoon...Matrixb(2,9);b(0,2)=3;...//Andsoon...//AfterawhileMatrixi=a*b;我昨天有什么此刻我重

c++ - 使用常量长度时 char[] 和 new char[] 之间的区别

所以这似乎是一个得到广泛回答的问题,但我更感兴趣的是两者之间到底发生了什么不同的内部结构。除了第二个示例不仅创建了内存,还创建了指向内存的指针这一事实,当发生以下情况时内存会发生什么:chara[5];charb*=newchar[5];与为什么我问这个问题更直接相关,我怎么能做constintlen=5;char*c=newchar[len];但不是constintlen=5;chard[len];//CompilererrorEDIT应该提到我在VC++上遇到了这个编译器错误(去计算...)1>.\input.cpp(138):errorC2057:expectedconstant

c++ - 为什么不在 placement new 中隐式调用析构函数”?

如本网站所引用...http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.10但是我没有找到原因,为什么我们要显式调用析构函数? 最佳答案 您可以将其视为对delete的调用,但由于您使用了placementnew,因此您不想使用delete,因为那样会尝试释放内存。如果你想让它自动调用,你可以使用RAII://Coulduseatemplatedversion,orfindanexistingimplsomewhere:voiddestroy_fred(Fred*f){f-

c++ - 按值(value)返回总是常量吗?

此代码无法编译:classC{};voidfoo(C&c){}Cbar(){returnC();}intmain(){foo(bar());}foo(bar())行中的编译错误(GCC4.1.2):invalidinitializationofnon-constreferenceoftype'C&'fromatemporaryoftype'C'由于bar()返回一个mutable对象,它应该编译...为什么C++不允许上述代码?编辑:我在ananswerbelow中做了总结所有答案的所有好主意;-) 最佳答案 此处适用的规则是您不能

c++ - new操作分配的内存是连续的吗?

如题所示,我想知道在c++中,一个new操作分配的内存是否连续... 最佳答案 BYTE*data=newBYTE[size];在此代码中,无论给定大小,返回的内存区域都是连续。如果堆管理器不能分配size的连续内存,则失败。将返回异常(或malloc中的NULL)。程序员总是会在进程的地址空间中看到连续(是的,无限:-)内存的错觉。这就是虚拟内存为程序员提供的。请注意,程序员(少数嵌入式系统除外)总是看到虚拟内存。然而,几乎连续的内存可以以任意方式映射到物理内存中(以“页面”大小为粒度,通常为4KB)。该映射您看不到,而且大多数情

c++ - 在 C++ 代码生成器中模仿 C# 'new'(隐藏虚方法)

我正在开发一个系统,它采用一组已编译的.NET程序集并发出C++代码,然后可以将这些代码编译到任何具有C++编译器的平台。当然,由于.NET可以做C++做不到的各种事情,这涉及到一些广泛的技巧。其中一种情况是能够隐藏虚拟方法,例如C#中的以下内容:classA{virtualvoidMyMethod(){...}}classB:A{overridevoidMyMethod(){...}}classC:B{newvirtualvoidMyMethod(){...}}classD:C{overridevoidMyMethod(){...}}我想出了一个看起来很聪明并且确实有效的解决方案,如

C++ 强制 new[] 不分配 4 个额外的字节

我正在用C++编写自己的内存系统(出于性能原因、额外的调试信息,以便我可以分配16字节对齐的内存),并且我遇到了new[]问题。似乎调用new[]会导致额外分配4个字节,指示数组中的元素数量,这会导致所有后续对象的对齐失败。所以我的问题是:有什么方法可以通过编译器标志、pragma声明等来关闭这4个额外字节的使用吗?这是一个例子://Matrixclasshastobe16-bytealignedMatrix*transforms=new(matrixHeap,ALIGN_16,__FILE__,__LINE__)Matrix[31];transforms[0]=Matrix::Ide

c++ - 全局重载运算符 new/new[] delete/delete[] C++

我有这个重载operatornew和delete的示例代码#include#include#include#ifdefUSE_ZMALLOCextern"C"{#include"zmalloc.h"}#definem_malloczmalloc#definem_freezfree#else#ifdefUSE_JEMALLOC#include#definem_mallocje_malloc#definem_freeje_free#else#include"malloc.h"#definem_mallocstd::malloc#definem_freestd::free#endif#end

c++ - std::vector 应该尊重 alignof(value_type) 吗?

如果我定义一个具有特定对齐要求的简单类型,该类型的std::vector难道不应该为每个元素遵守对齐吗?考虑下面的例子typedefstd::arrayalignas(32)avx_point;std::vectorx(10);assert(!(std::ptrdiff_t(&(x[0]))&31)&&//assertthatx[0]is32-bytealigned!(std::ptrdiff_t(&(x[1]))&31));//assertthatx[1]is32-bytealigned我发现clang3.2(带或不带-stdlib=libc++)悄悄地(没有任何警告)违反了对齐要求