首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++内存问题排查攻略

修饰符的含义如下: static: 堆栈使用量在编译时是已知的,不依赖于任何运行时条件。 dynamic: 堆栈使用量依赖于运行时条件,例如递归调用或基于输入数据的条件分支。...xxbuild.cpp:277:5:int XXBuild::BuildPage() 528 dynamic,bounded 每个函数的栈使用量有了,如果知道函数的调用链就可以得出栈的最大使用量了。...如果通过注册一个自定义的信号处理函数来拦截 SIGSEGV信号,处理函数会收到一个 siginfo_t 结构体,其中包含错误的地址和寄存器状态等上下文信息,可以判断是否发生了栈溢出。...工具: libsigsegv-devel,可以定义自己的处理函数来响应内存访问错误,例如尝试恢复、记录错误信息或者优雅地关闭程序。...查看 coredump 文件,发现经常崩溃在 STL 容器(如 std::map、std::unordered_map、std::vector 等)中 std::allocator 的析构相关函数,但backstrace

28610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【栽了】迄今为止吐槽最多的标准库函数

    记得在去年群里聊天的时候,群里有人提到了std::regex,有不少人进行了吐槽: 当时,没有对这块做更多的发言,毕竟没有调查也就没有发言权,直至前段时间的一个bug,才知道原来大家对std::regex...在将标签返回给客户端的时候,会将标签以字符串方式进行拼接,如下expa;expb;layerid_def;,需要做个说明的是,因为某些特殊原因,如果没有命中某个实验层的实验,就以layerid_def这种方式来表示...所以第一时间想到的是用正则 const static std::regex rex("[0-9]*_def;"); std::string result; std::regex_replace(std:...好了,通过gdb分析下调用堆栈: (gdb) bt #0 std::__detail::_Executorchar const*, std:...*, std::__cxx11::basic_stringchar, std::char_traitschar>, std::allocatorchar> > > > >, std::__cxx11

    48510

    C++雾中风景15:聊聊让人抓狂的Name Mangling

    比如:函数的重载,或通过不同程序块与命名空间变量与函数的重名。 而在出现变量或函数名相同的情况下,编译器进行代码编译时需要保证变量与函数的签名的全局唯一性。...std::vectorstd::__cxx11::basic_stringchar, std::char_traitschar>, std::allocatorchar> >, std::allocator...std::__cxx11::basic_stringchar, std::char_traitschar>, std::allocatorchar> > > > Happen::MyClass:...3.2 extern "C" 所以通过C++定义的函数需要被C语言调用时,需要通过keyword:extern C来显式的让编译器明白需要使用C语言的Name Mangling规则,以便编译器链接时能够正确的识别函数签名来定位到所需的函数...4.小结 C++的编译链接问题常常让人抓狂,很多时候如果没有深入了解这个过程之中的逻辑,很容易陷入困境。本篇聊了聊笔者在遇到编译问题时学习Name Mangling来最终解决问题的学习小结。

    1K41

    C++ 动态新闻推送 第62期

    但是,优化效果却不同,chop2能优化成memset chop1(int*, std::__cxx11::basic_stringchar, std::char_traitschar>, std:...::__cxx11::basic_stringchar8_t, std::char_traitschar8_t>, std::allocatorchar8_t> >&): mov...char * 由于历史原因,可以表达int,编译器默认指针收到影响,写str莫名其妙的影响到了count 所以这里的*count不会优化成不变量 当然不是说u8string是为了解决这个问题的,这个问题主要还是指针对于上下文的影响...,对于简单函数,能避免指针影响的对象,就尽量用对象 Speeding up Pattern Searches with Boyer-Moore Algorithm from C++17 压测代码在这里...int value; }; 这时候就会有告警提醒,你这个move是没有任何作用的,因为int是trival 给他加上个空 析构函数就不是trival了 还有一种场景,有成员函数操作 // Remember

    22820

    QT5在windows下调用OpenCV库出现: undefined reference to `xxxxx 错误解决办法(适用MinGW编译器)。

    编译器的版本: 二、使用OpenCV出现的问题 在QT框架代码里使用老版本的分类器(cvLoad、cvHaarDetectObjects)处理图像时,正常编译没有问题,当使用新版本级联分类器(CascadeClassifier...)时,程序编译就会出现一堆没有定义的错误: release/widget.o:widget.cpp:(.text+0x2a1): undefined reference to `cv::fastFree...::__cxx11::basic_stringchar, std::char_traitschar>, std::allocatorchar> > const&)' release/widget.o...::__cxx11::basic_stringchar, std::char_traitschar>, std::allocatorchar> > const&)' release/widget.o...:widget.cpp:(.text+0x268f): undefined reference to `cv::CascadeClassifier::load(std::__cxx11::basic_string

    6.3K20

    string 性能优化之存储:栈或者堆

    直接分配 大概在08年的时候,手动实现过string,没有考虑性能,所以单纯是从功能的角度进行实现,下面摘抄了部分代码,如下: string::string(const char* s) { size...这样做的好处是,可以通过输出来发现是否调用了new进行动态分配。...,当字符串长度小于16的时候,没有调用我们的operator new函数,这就从侧面证明了前面的结论当分配大小小于16个字节时候,从栈上进行分配,而如果大于等于16个字节,则在堆上进行内存分配。...::__cxx11::basic_stringchar, std::char_traitschar>, std::allocatorchar> >::basic_string(char const...,在basic_string()函数的构造中,首先将__M_dataplus指向local_buf,然后调用__M_construct进行实际构造,而M_construct最终会调用如下代码: template

    65020

    如何优雅的传递 stl 容器作为函数参数来实现元素插入和遍历?

    为此,我在接收到消息后,会将它们保存在进程中的一个容器中,当有新消息到达时,会先在这个容器里检查有没有收到这条消息,如果有,就不再转发。...使用普通模板函数代替类成员模板函数 本文的最后,我们再回头看一下上面例子中的两个成员模板函数,发现它们并没有使用到类中的其它成员,其实完全可以将它们独立成两个普通模板函数去调用,例如改成这样: 1 namespace..."int __cdecl GCM::db_fetch_server_msgstd::map_inserterstd::basic_stringchar,struct std...basic_stringchar,struct std::char_traitschar>,class std::allocatorchar> > > > >(class std::map_inserter...,struct std::lessstd::basic_stringchar,struct std::char_traitschar>,class std::allocatorchar

    3.7K20

    cmake链接静态库-static-libstdc++问题

    在嵌入式平台中,业务使用C语言开发,在交叉编译过程中会链接一个第三方的c++静态库,该第三放库使用了std,需要链接libstdc++的库,由于所在的嵌入式平台中没有libstdc++.so库,如果将libstdc...(${target} ${src_sample}) target_link_libraries(${target}  -static-libgcc;-static-libstdc++) 但是在最终的链接过程中出现如下错误...; undefined reference to `std::__cxx11::basic_stringchar, std::char_traitschar>, 这个错误的原因是不能识别std,即没有链接...'lstdc++'是gcc和g++都能识别,但是'-static-libstdc++'只有g++可以识别,而我的业务代码都是使用C语言编写的,在链接时cmake默认使用的是gcc,但是gcc不能识别'-...static-libstdc++',最终不会链接到实际的libstdc++.a,所以在链接时出现不能识别std的问题; 知道原因了,就很好解决了,在链接阶段将cmake的链接选项改为g++即可,添加如下一行就可以正常链接成功

    7.1K51
    领券