草庐IT

new_time

全部标签

c++ - 当您调用 new[] 为 N 个整数分配一个数组时,是否保证该数组将按顺序分配到物理内存中?

据我了解,每个计算机程序总是使用虚拟内存,而处理物理内存的方式取决于操作系统。我正在参加一个算法工程类(class),在某个时候有人提到,如果缓存内存是无限的并且一个缓存行的大小为B那么预计会发生的缓存未命中数如果您只想扫描N元素的数组,则为N/B我可以看出这在理论上是如何工作的,因为我们假设N元素在物理内存中一个接一个地放置。但是,这实际上是真的吗?如果虚拟内存是顺序分配的,那是否也意味着物理内存也将是顺序分配的?在我看来,在实践中,假设N不大于缓存大小,如果N元素未在物理内存(RAM)中按顺序分配。也许我误解了虚拟内存和物理内存之间的区别,我不确定。 最

c++ - 是否有像 C# 中那样的 C++ new 声明

我想知道是否有像C#中那样的new声明用于C++C#允许您这样做,它只是稍微整理了代码:FuncCall(newFoo(){Bar="sausage",Boo=4});只是我觉得这在C++中有点草率:unique_ptrfoo(newFoo());foo.Bar="sausage";foo.Boo=4;FuncCall(move(foo));Foo可能看起来像这样:classFoo{public:Foo();stringBar;intBoo;}为什么我不将所有内容都放入构造参数中?因为当你必须初始化这么多的时候,这很愚蠢:Foo(intwidth,intheight,stringtit

c++ - 使用 Boost.Date_Time 解析带时区的日期时间?

我想使用BoostDateTimeIO解析带时区的日期时间图书馆。#include#include#includeusingnamespaceboost::gregorian;usingnamespaceboost::posix_time;std::chrono::system_clock::time_pointParseDate(conststd::wstring&dateText,constwchar_t*constformat){ptimetime;std::wstringstreambuffer(dateText);buffer.imbue(std::locale(std::l

c++ - "run time templates"

我很确定答案是“你不能使用模板,你必须使用虚函数(动态多态性)”,但如果我走那条路,我似乎必须复制很多代码.这是设置:我目前有两个类,ColorImageSegmentation和GrayscaleImageSegmentation。他们做的事情本质上是一样的,但是有3个区别-它们对不同类型(ColorImage和GrayscaleImage)进行操作-一个参数,直方图的维度(3vs1)不同-PixelDifference函数根据图像类型不同如果我创建一个类templateclassImageSegmentation{};我会保持良好的状态。但是,我想让这个对象成为另一个类的成员:cl

c++ - 为什么 new 和 delete 在 MSVC 2010 下的循环中这么慢

当我尝试在循环中创建和删除类的实例时遇到问题。迭代的执行时间是完全不同的。据我了解,这与从内存中删除对象有关。但是,这个操作的行为我不明白。为什么时间不同?我如何解决它?当我在单独的线程中删除对象时,时间是稳定的。classNODE{public:NODE(){}NODE*add(NODE*node){children.push_back(node);returnnode;}virtual~NODE(){for(vector::iteratorit=children.begin();it!=children.end();++it){delete*it;}}vectorchildren;

c++ - 使用 boost::posix_time::microsec_clock 的测量误差超过十微秒?

我有以下代码:longlongunsignedintGetCurrentTimestamp(){LARGE_INTEGERres;QueryPerformanceCounter(&res);returnres.QuadPart;}longlongunsignedintinitalizeFrequency(){LARGE_INTEGERres;QueryPerformanceFrequency(&res);returnres.QuadPart;}//starttimestampboost::posix_time::ptimestartTime=boost::posix_time::mic

c++ - 成员函数检查 : Implement compilation-time checkings with C++11 features

我读到C++11有足够的静态检查(编译时),以便实现C++11的大部分内容(已删除)。(我在最近关于已删除概念的问题的评论中读到过此内容...-该问题因不具有建设性而很快被关闭)。下面的C++03代码仅检查类中是否存在成员函数(我的模板类要在该类上工作)。这里有4个搜索的成员函数,我总是使用相同的模式:定义函数原型(prototype)的typedef如果类型名称TExtension没有定义这样的成员函数,或者如果它有不同的原型(prototype),则调用static_cast会中断编译代码如下:templateclass{...voidcheckTemplateConcept(){

c++ - 你如何删除一个分配了 placement new 的对象

C++中的new运算符有很多面孔,但我对placementnew感兴趣。假设你在一个特定的内存位置分配内存intmemoryPool[poolSize*sizeof(int)];int*p=new(mem)int;//allocatesmemoryinsidethememoryPoolbufferdeletep;//segmentationfault在这种情况下,我如何正确地释放内存?如果我不使用内置类型int,而是使用某个名为myClass的类,会怎样?myClassmemoryPool[poolSize*sizeof(myClass)];myClass*p=new(mem)myCl

c++ - 在 boost::posix_time 中设置值(年、月、日...)

在一个类中,我有一个属性boost::posix_time::ptime,它指的是这样的日期和时间:boost::posix_time::ptimep_;在构造函数中,我可以毫无问题地传递值和设置它们。my_class::my_class(...):p_(boost::posix_time::ptime(boost::gregorian::date(y,M,d),hours(h)+minutes(m)+seconds(s)+milliseconds(ms)+microseconds(us)+nanosec(ns));我想为这个ptime的所有字段(年、月、日、小时......如果可能的

c++ - C++ new 运算符能保证返回的指针不会改变它的值吗?

在C++中:constsize_tN=1000;int*p=newint[N];//time=t0我的程序只有一个线程,在为p分配内存后,我的程序将只读取p指向的内存。标准对p的值有何规定?p是否会保留它在time=t0时获得的值,直到p被删除?或者,操作系统能否自行决定重新分配p指向的内存?是否取决于N的值? 最佳答案 p的值在创建后不能移动。该标准使这样做毫无用处:3.7.4.1分配函数...如果请求成功,则返回值应为非空指针值(4.10)p0,不同于任何先前返回的值p1,除非该值p1随后被传递给操作符delete。(引用标准结