Android之性能监控框架
[TOC]
概述
指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分配内存空间。
引用在定义的时候必须进行初始化,并且不能够改变。指针在定义的时候不一定要初始化,并且指向的空间可变。(注:不能有引用的值不能为NULL)
有多级指针,但是没有多级引用,只能有一级引用。
指针和引用的自增运算结果不一样。(指针是指向下一个空间,引用时引用的变量值加1)
sizeof 引用得到的是所指向的变量(对象)的大小,而sizeof 指针得到的是指针本身的大小。
引用访问一个变量是直接访问,而指针访问一个变量是间接访问。
使用指针前最好做类型检查,防止野指针的出现;
引用底层是通过指针实现的;
作为参数时也不同,传指针的实质是传值,传递的值是指针的地址;传引用的实质是传地址,传递的是变量的地址。
指针参数传递和引用参数传递指针参数传递本质上是值传递,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,会在栈中开辟内存空间以存放由主调函数传递进来的实参值,从而形成了实参的一个副本(替身)。值传递的特点是,被调函数对形式参数的任何操作都是作为局部变量进行的,不会影 ...
Android之性能监控框架
[TOC]
概述文章转自:https://www.nhooo.com/cpp/cpp-pointers.html
C++之shared_ptr智能指针学习
[TOC]
文章参考:https://www.jianshu.com/p/03eea8262c11
文章参考:http://c.biancheng.net/view/7898.html
概述在实际的 C++ 开发中,我们经常会遇到诸如程序运行中突然崩溃、程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的。比如:
有些内存资源已经被释放,但指向它的指针并没有改变指向(成为了野指针),并且后续还在使用;
有些内存资源已经被释放,后期又试图再释放一次(重复释放同一块内存会导致程序运行崩溃);
没有及时释放不再使用的内存资源,造成内存泄漏,程序占用的内存资源越来越多。
针对以上这些情况,很多程序员认为 C++ 语言应该提供更友好的内存管理机制,这样就可以将精力集中于开发项目的各个功能上。
C++11 中引入了智能指针, 同时还有一个模板函数 std::make_shared 可以返回一个指定类型的 std::shared_ptr, 那与 std::shared_ptr 的构造函数相比它能给我们带来什么好处呢 ?
什么是std::shared_ptr< ...
C++11之weak_ptr智能指针基础学习
[TOC]
概述文章参考:https://mp.weixin.qq.com/s/UmIoCxfkZwmIFL1pSSJynQ
weak_ptr是一种不控制对象生命周期会智能指针,它指向一个shared_ptr管理对象
C++11之unique_ptr智能指针学习
[TOC]
概述内存管理是C++中的一个常见的错误和bug来源。在大部分情形中,这些bug来自动态分配内存和指针的使用:当多次释放动态分配的内存时,可能会导致内存损坏或者致命的运行时错误;当忘记释放动态分配的内存时,会导致内存泄露。
所以,我们需要智能指针来帮助我们管理动态分配的内存。其来源于一个事实:栈比堆要安全的多,因为栈上的变量离开作用域后,会自动销毁并清理。智能指针结合了栈上变量的安全性和堆上变量的灵活性。
C++ 标准提供了 3 种智能指针,分别是 shared_ptr、unique_ptr 和 weak_ptr,本节我们给大家讲解 unique_ptr 智能指针的特性和用法。
关于 shared_ptr 智能指针,可以阅读《C++11之shared_ptr智能指针基础学习》一节;
关于 weak_ptr 智能指针,可以阅读《C++11之weak_ptr智能指针基础学习》一节。
unique_ptr特点作为智能指针的一种,unique_ptr 指针自然也具备“在适当时机自动释放堆内存空间”的能力。
std::unique_ptr 和 shared_ptr 指针最大的不同之处在 ...
Android之性能监控框架
[TOC]
ubuntu搭建CMake环境apt安装cmake
1sudo apt install cmake
Android之性能监控框架
[TOC]
文章转自:http://c.biancheng.net/view/7887.html
概述实际开发中,避免产生“野指针”最有效的方法,就是在定义指针的同时完成初始化操作,即便该指针的指向尚未明确,也要将其初始化为空指针。
所谓“野指针”,又称“悬挂指针”,指的是没有明确指向的指针。野指针往往指向的是那些不可用的内存区域,这就意味着像操作普通指针那样使用野指针(例如 &p),极可能导致程序发生异常。
C++98/03 标准中,将一个指针初始化为空指针的方式有 2 种:
12int *p = 0;int *p = NULL; //推荐使用
可以看到,我们可以将指针明确指向 0(0x0000 0000)这个内存空间。一方面,明确指针的指向可以避免其成为野指针;另一方面,大多数操作系统都不允许用户对地址为 0 的内存空间执行写操作,若用户在程序中尝试修改其内容,则程序运行会直接报错。
Android之性能监控框架
[TOC]
概述file文件操作命令:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117file(WRITE filename "message towrite"... )WRITE 将一则信息写入文件’filename’中,如果该文件存在,它会覆盖它,如果不存在,它会创建该文件。file(APPEND filename "message to write"... )APPEND 如同WRITE,区别在于它将信息内容追加到文件末尾。 file(READ filename variable [LIMIT numByte ...
Android之性能监控框架
[TOC]
文章转自:https://blog.csdn.net/dieju8330/article/details/106418178
CMake 是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的 Makefile 或者 project 文件,CMake 并不直接建构出最终的软件,而是产生标准的建构档(如 Makefile 或 projects)。
以前做 NDK 开发都是基于 Android.mk、Application.mk 来构建项目的,但从 AS 2.2 之后便开始采用 CMake 的这种方式来构建,采用 CMake 相比与之前的 Android.mk、Application.mk 方便简单了许多。但公司有一些古老的项目还是采用 Android.mk 和 Application.mk 来构建的,因此大家还是有必要花些时间去了解这种构建方式。但重心得放在 CMake 的构建方式上,因此本文主要来说说 CMake 的构建语法基础。
之前都是采用 gcc hello.cpp -o hello 命令来生成可执行文件,但现在我们用 ...
Android之性能监控框架
[TOC]
常用命令
常用命令
命令解析
示例说明
INCLUDE_DIRECTORIES( “dir1” “dir2” … )
头文件路径,相当于编译器参数 -Idir1 -Idir2
include_directories(“${PROJECT_BINARY_DIR}”)
LINK_DIRECTORIES(“dir1” “dir2”)
库文件路径。注意: 由于历史原因,相对路径会原样传递给链接器。 尽量使用FIND_LIBRARY而避免使用这个。
AUX_SOURCE_DIRECTORY( “sourcedir” variable)
收集目录中的文件名并赋值给变量
ADD_EXECUTABLE
可执行程序目标
ADD_LIBRARY
库目标
ADD_CUSTOM_TARGET
自定义目标
ADD_DEPENDENCIES( target1 t2 t3 )
目标target1依赖于t2 t3
ADD_DEFINITIONS( “-Wall -ansi”)
本意是供设置 -D… /D… 等编译预处理需要的宏定义参数,对比 RE ...