草庐IT

static-memory-allocation

全部标签

c++ - static const 成员变量初始化

看起来我可以初始化一个POD静态常量成员,但不能初始化其他类型:structC{staticconstinta=42;//OKstaticconststringb="hi";//compileerror};为什么? 最佳答案 类定义中的语法initializer只允许用于整型和枚举类型。对于std::string,它必须在类定义之外定义并在那里初始化。structC{staticconstinta=42;staticconststringb;};conststringC::b="hi";//inoneofthe.cppfilesst

c++ - 在 Qt Creator 中使用 'Analyze Memory' 工具

我正在使用QtCreator开发C++应用程序,我正在尝试追踪一些内存泄漏。我关注了theseinstructions*,并在我的Ubuntu机器上安装了Valgrind。我从AnalyzeMemory部分开始我的应用程序,在单击停止按钮后,我被告知ToolAnalyzeMemory已完成,发现928个问题。但是,分析部分没有显示任何结果,该部分仍为空白。我做错了什么吗?在哪里可以找到内存分析的结果?*令人困惑的是,说明要求“发布”构建配置,但选择此选项会导致Qt中出现警告,指出内存分析工具需要调试配置。两种方法我都试过了。 最佳答案

c++ - 如何在 C 语言的 gdb 中调试 St9bad_alloc 失败?

我有一个程序失败了:terminatecalledafterthrowinganinstanceof'std::bad_alloc'what():St9bad_alloc我想这与malloc/free有关,但我不知道是哪一个。我可以在gdb中设置什么断点来中断错误,以便我可以查看堆栈跟踪?该程序是C和C++的组合,使用gcc3.4.2编译。 最佳答案 导致异常的并不是真正的malloc/free,它是“新的”,它肯定在您的应用程序的C++部分中。看起来您提供的参数对于"new"分配来说太大了。'std::bad_alloc'是由以下

c++ - std::allocator 构造/销毁与放置 new/p->~T()

对于我的一个项目,我正在从头开始编写一些STL容器(我有我的理由)。由于我非常接近地模仿STL的功能和接口(interface),所以我会尽最大努力遵守“如果它与标准结构同名,它将尽可能符合标准”的政策。所以,当然我的容器将分配器作为模板参数,这非常好,因为它允许一些自定义分配方案。关于我的问题。std::allocator接口(interface)将内存分配与对象构造分开。同样,它将释放与销毁分开。这是有道理的,因为从哪里获取内存与在C++中正确构造对象或多或少无关。所以有两个构造/释放函数,默认实现如下所示(直接从书中摘录):voidconstruct(pointerp,const

c++ - 头文件中的 `static` , `extern` , `const`

//a.hexternintx1;staticintx2;intx3;staticconstintx4;classA{public:staticconstintx5=10;};a.h会被多个.cpp文件包含,我的问题是:1.x1只是一个声明,不是吗?所以它的定义应该在那些.cpp文件之一中完成,对吧?2.x2是一个定义,对吧?我曾经认为staticint和externint一样也是一个声明,但我错了。x2将仅在a.h中可见?3.如果a.h包含在多个.cpp文件中,x3会被定义多次,所以x3会导致编译错误,对吧?4.x4是一个定义,对吧?5.这里在A类中,x5是一个声明,是的。但是x4呢

c++ - C++ 示例 "Memory barrier"

这个问题在这里已经有了答案:C++MemoryBarriersforAtomics(2个答案)关闭9年前。我正在阅读这个关于volatile关键字的问题的答案:https://stackoverflow.com/a/2485177/997112那个人说:Thesolutiontopreventingreorderingistouseamemorybarrier,whichindicatesbothtothecompilerandtheCPUthatnomemoryaccessmaybereorderedacrossthispoint.Placingsuchbarriersaroundo

c++ - 为什么我们使用 static_cast 为 NULL

当我尝试研究QP/CPP代码时,我遇到了以下行。QTimeEvt*t;//...if(t==static_cast(0)){为什么他们要做0的static_cast?如果他们想检查NULL,我们可以直接这样做吗?这个源代码你可以在中找到http://www.state-machine.com/qpcpp/qf__time_8cpp_source.html 最佳答案 是的,这是不必要的,尽管它可能是某些风格指南为了“清晰”而强制要求的,或者它可能是为了让过度热心的静态分析工具沉默。当然,如今,我们只需编写nullptr就可以了。

c++ - 为什么 std::allocator::construct 和 std::allocator::destroy 在元素类型上模板化?

std::allocator的construct和destroy成员函数根据要构造的元素的类型进行参数化:templateclassallocator{public:typedefTvalue_type;typedefT*pointer;templatevoidconstruct(U*p,Args&&...args);templatevoiddestroy(U*p);...};这样做的理由是什么?他们为什么不选择value_type*或pointer?好像allocator应该只知道如何构造或销毁T类型的对象. 最佳答案 这与all

C++ : initialize static member large array

为了在C++中使用静态数据成员,我目前有类似的东西://HEADERFILE.hclassMyClass{private:staticdoublemyvariable;};//CPPFILE.cppdoubleMyClass::myvariable=0;但如果现在我有://HEADERFILE.hclassMyClass{private:staticdoublemyarray[1000];};如何初始化它?谢谢 最佳答案 和初始化普通数组一样:doubleMyClass::myarray[1000]={1.1,2.2,3.3};缺少

c++ - "static"在 C 和 C++ 中表示没有外部链接的函数/变量是怎么发生的?

在C中,static可以表示局部变量或没有外部链接的全局函数/变量。在C++中,它也可以表示每个类的成员变量或成员函数。有没有提到如何使用看起来与缺少外部链接完全无关的static关键字来表示缺少外部链接? 最佳答案 使用已经存在的关键字的优点是不会向语言添加新的关键字,这可能会破坏现有的程序。它可能令人困惑,但它被认为是一种“较小的邪恶”。 关于c++-"static"在C和C++中表示没有外部链接的函数/变量是怎么发生的?,我们在StackOverflow上找到一个类似的问题: