C++面试题大全
[TOC]
C++内存模型1.C/C++内存有哪几种类型C中,内存分为5个区:堆(malloc)、栈(如局部变量、函数参数)、程序代码区(存放二进制代码)、全局/静态存储区(全局变量、static变量)和常量存储区(常量)。此外,C++中有自由存储区(new)一说。
2.C++堆和栈的区别?1)堆存放动态分配的对象——即那些在程序运行时动态分配的对象,比如 new 出来的对象,其生存期由程序控制;
2)栈用来保存定义在函数内的非static对象,如局部变量,仅在其定义的程序块运行时才存在;
3)静态内存用来保存static对象,类static数据成员以及定义在任何函数外部的变量,static对象在使用之前分配,程序结束时销毁;
4)栈和静态内存的对象由编译器自动创建和销毁。
3.堆和自由存储区的区别?总的来说,堆是C语言和操作系统的术语,是操作系统维护的一块动态分配内存;自由存储是C++中通过new与delete动态分配和释放对象的抽象概念。他们并不是完全一样。
从技术上来说,堆(heap)是C语言和操作系统的术语。堆是操作系统所维护的一块特殊内存,它提供了动态分配 ...
C++内存泄漏分析相关
[TOC]
文章参考:https://mp.weixin.qq.com/s/ZKZ1NMNX-3d7stMWNtO7ig
概述
C++性能优化之内存泄漏排查
[TOC]
概述文章参考:http://senlinzhan.github.io/2017/12/31/valgrind/
文章参考:https://blog.csdn.net/weiwei9363/article/details/107834706
文章参考:https://www.jetbrains.com/help/clion/memory-profiling-with-valgrind.html
文章参考:https://github.com/LouisBrunner/valgrind-macos/
使用 Valgrind 检测 C++ 内存泄漏Valgrind 的介绍Valgrind 可以用来检测程序是否有非法使用内存的问题,例如访问未初始化的内存、访问数组时越界、忘记释放动态内存等问题。在 Linux 可以使用下面的命令安装 Valgrind:
123456$ wget ftp://sourceware.org/pub/valgrind/valgrind-3.13.0.tar.bz2$ bzip2 -d valgrind-3.13.0.tar.bz2$ tar -xf va ...
C++性能分析工具Valgrind使用教程
[TOC]
概述文章参考:https://blog.csdn.net/tissar/article/details/87194737
文章参考:https://blog.csdn.net/kl222/article/details/40890823
文章参考:https://developer.aliyun.com/article/243932
文章参考:https://blog.csdn.net/ThinkAboutLife/article/details/109592322
CLion使用ValgrindMacOS:
12brew tap LouisBrunner/valgrindbrew install --HEAD LouisBrunner/valgrind/valgrind
在 mac 下安装 Valgrind 比较麻烦,在尝试多次后,总结出上面的安装方式
Linux:
1sudo apt install valgrind
Windows,WSL 环境下:
1sudo apt-get install valgrind
Ubuntu环境CLion配置
设置完成之后 ...
C++系统级性能分析工具perf的介绍与使用
[TOC]
概述文章参考:系统级性能分析工具perf的介绍与使用
文章参考:http://linux.51yip.com/search/perf
文章参考:https://www.jianshu.com/p/3f89b90a1717
文章参考;https://zhuanlan.zhihu.com/p/370121381
文章参考:https://my.oschina.net/u/4009527/blog/2979947
文章参考:https://github.com/gperftools/gperftools
查看Google Perf工具
如果您没有安装brew:
请查看Homebrew安装的教程
如果你安装了brew:
perf软件安装Ubuntu系统12345678910111213141516171819202122232425262728293031323334353637(base) frewen@FreweniUbuntu:~$ perfCommand 'perf' not found, but can be installed with:sudo a ...
15.C++之intel编译器优化
[TOC]
概述文章参考:https://community.intel.com/t5/Intel-C-Compiler/compiler-optimized-msse4-2-xSSE4-2-and-arch-SSE4-2/m-p/775192
C++中的Cmake的编译优化
编译器优化:-msse4.2 -xSSE4.2 和 -arch SSE4.2 ?
12345# x86 CPU 上启用 SSE 指令集if (TARGET_ARCH STREQUAL "x86_64") add_compile_options(-msse4.2) message(STATUS "use SSE on x86_64 platform")endif ()
知道这三个选项有什么不同??
文章参考:
-xSSE4.2,如您所说,会生成一个二进制文件,该二进制文件会显示一条消息并拒绝在未被识别为支持该选项的平台上运行。
-msse2 是最近的英特尔编译器的默认选项。我预计 -msse2 和 -xSSE2 之间的自动矢量化不会有太大差异;当然,-xSSE2 ...
cmake学习之命令行工具学习
[TOC]
文章参考:https://cmake.org/cmake/help/v3.19/manual/cmake.1.html#build-a-project
概述12345678910111213141516171819202122232425# Generate a Project Buildsystem cmake [<options>] <path-to-source> cmake [<options>] <path-to-existing-build> cmake [<options>] -S <path-to-source> -B <path-to-build># Build a Project cmake --build <dir> [<options>] [-- <build-tool-options>]Install a Project cmake --install <dir> [<options>]Open a Pro ...
cmake学习之macroa宏定义
[TOC]
文章参考:https://www.h3399.cn/201802/546661.html
文章参考:https://cmake.org/cmake/help/v3.0/module/CMakeParseArguments.html
概述引入在C++程序中我们经常见到如下,两个问题:
输出当前程序的版本号
通过cmake添加macro宏定义 出入到源文件,例如在编译opencv caffe的时候,我们通过cmake -DUSE_CUDA=ON/OFF来确定,是否使用cuda.
问题cmake中如何实现上述两个功能的呢?
至于问题1:
我们可能想到直接在头文件中定义,这样也可以,但是如果直接在cmake中定义,然后传递给程序读取生成更加灵活。
至于问题2:
可以在cmake中通过option函数以及add_definitions函数来实现。
宏和函数(macro vs function)宏macro定义与应用12345macro(<name> [arg1 [arg2 [arg3 ...]]]) COMMAND1(ARGS ...) ...
cmake学习之File命令
[TOC]
文章参考:https://www.jianshu.com/p/ed151fdcf473
概述file命令是文件操作命令。
此命令专用于需要访问文件系统的文件和路径操作。
Reading1234file(READ <filename> <out-var> [...])file(STRINGS <filename> <out-var> [...])file(<HASH> <filename> <out-var>)file(TIMESTAMP <filename> <out-var> [...])
Writing123file({WRITE | APPEND} <filename> <content>...)file({TOUCH | TOUCH_NOCREATE} [<file>...])file(GENERATE OUTPUT <output-file> [...])
...
cmake学习之target_指令学习
[TOC]
概述文章转自:https://zhuanlan.zhihu.com/p/82244559
target_include_directories():指定目标包含的头文件路径。官方文档:https://cmake.org/cmake/help/v3.15/command/target_include_directories.html?highlight=target_include_directories
target_link_libraries():指定目标链接的库。官方文档:https://cmake.org/cmake/help/v3.15/command/target_link_libraries.html?highlight=target_link_libraries
target_compile_options():指定目标的编译选项。官方文档:https://cmake.org/cmake/help/v3.15/command/target_compile_options.html#command:target_compile_options
目标 由 add ...