GCC详解-Binutils工具之addr2line
1、介绍addr2line是一个可以将指令的地址和可执行映像转换为文件名、函数名和源代码行数的工具。可以通过帮助看下其使用情况:$ addr2line -hUsage: addr2line [option(s)] [addr(s)]Convert addresses into line number/file name pairs.If no addresses are specified on the command line, they will be read from std..
GCC详解-gcc之-Wl选项
1、介绍-Wl后面的东西是作为参数传递给链接器ld的。比如:gcc -Wl,aaa,bbb,ccc最后会被解释为:ld aaa bbb ccc2、-Wl,-Map=xxx.txt 生成map文件如下会生成map文件mymap.txt。gcc -Wl,-Map=mymap.txt -g main.c -o main3、-Wl,-Bstatic 和 -Wl,-Bdynamic 指定链接动态库或者静态库-Wl,-Bstatic -laaa -lbbb -lccc.
GCC详解-Binutils工具之c++filt
1、介绍C++的name mangling遵循一定的规则,因此是可逆的,即通过符号还原出原来的函数定义。c++filt就是这样的一个工具。2、例子直接上例子。我们写一个C++程序:#include <stdio.h>class A{public: int a_func(int a, int b) { return a+b; } int a_func(int a)
Linux内存那些事 -- VSS、RSS、PSS、USS
1、背景如果一个进程内存消耗太多,那么会导致整个系统内存紧张,而出现OOM等。所以我们经常会需要统计整个系统各个进程内存消耗的情况。一般对一个进程的内存的表示有4种方式:VSS、RSS、PSS、USS,那么什么时候应该用哪种方式统计呢?我们需要先了解他们的差别:VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的全部内存,以及分配但未使用内存)RSS- Resident Set Size 实际使用物理内存(包含共享库占用的全部内存)PSS- Proportional S
Linux内存那些事 -- OOM
1、介绍OOM killer(Out Of Memory killer)是Linux内核的一个机制,该机制会在内存分配失败的时候被触发,然后根据配置来决定是下一步策略:或者引起系统panic而重启,或者将一些bad的进程kill掉。2、OOM相关参数OOM的参数可以通过应用层来进行设置,这些接口一般都在/proc/sys/vm下。参数 说明 可选值 可选值说明 panic_on_oom 用来控制当内存不足时是否启用OOM 0 内存不足时,启动 OOM
ARM Cortex-A系列编程指南之ARMv8 A
此系列文章是对《ARM® Cortex®-A Series Programmer's Guide for ARMv8-A》的重点解读,目的是对ARMv8 A的官方编程指南进行解读和重点内容整理,方便网友和自己深入使用。其下载路径在:Documentation – Arm Developer=========================================================================注意:本文为本人原创,版权所属为个人所有,欢迎转载,但是转载
ARM Cortex-A系列编程指南之ARMv8 A -- 前言
2013年,ARM发布了64bit ARMv8架构。这是2007年ARMv7以来,ARM架构的重大变更,也是自ARM架构被创建以来最基础,影响也最深远的变更。写这份指南的作者,绝大部分也是《Cortex-A Series Programmer’s GuideCortex-A Series Programmer’s Guide》的作者。这份指南是如下资料的补充:每个处理器的《Technical Reference Manuals (TRMs)》、具体设备和板子的相关资料、《ARM Architectu
ARM Cortex-A系列编程指南之ARMv8 A -- 第一章 简介
ARMv8既包括32bit运行状态(execution state),又包括64bit运行状态。ARMv8可以对64bit宽的寄存器进行操作,但是也向后兼容ARMv7的软件(32bit的),也就是说ARMv7的软件(32bit的)可以在ARMv8上运行。通常用“AArch64”来表示64bit运行状态,“AArch32”来表示32bit运行状态(几乎和ARMv7是一样的)。因为ARMv8的很对概念,在ARMv7中都有,所以不是所有详细的概念都在这里包含了。对ARMv7架构的介绍,可以参考《ARM®
ARM Cortex-A系列编程指南之ARMv8 A -- 第二章 ARMv8 A架构和处理器
从1985年开始ARM架构经历了如下阶段:ARMv4及早期版本 早期的使用ARM32bit指令集 ARMv4T ARM32bit指令集的基础上,追加了Thumb16bit指令集。 这是第一个被广泛授权的ARM架构。 ARM7TDMI®和ARM9TDMI®处理器。 ARMv5TE The ARMv5TE architecture added improvements for DSP-type operations, sa.
ARM Cortex-A系列编程指南之ARMv8 A -- 第三章 ARMv8基础
1、异常等级ARMv8处理器运行时,运行在4种异常等级的其中一个等级。和ARMv7的特权等级类似,在AArch64运行状态,异常等级决定了特权等级。EL0~EL3,数字越高,异常等级越高。EL0 普通用户应用 EL1 操作系统内核 EL2 Hypervisor EL3 低层级固件(包括Secure Monitor) 一般情况下,应用程序、操作系统内核、Hypervisor,占有一个单独的异常等级。但是有个例外,就是像KVM这样的在内核中的Hyperviso
ARM Cortex-A系列编程指南之ARMv8 A -- 第四章 ARMv8寄存器
1、通用寄存器AArch64运行环境提供了31个64bit的通用寄存器:X0~X31,同时他们也都有32bit的形式:W0~W31,他们对应映射到64bit寄存器的低32位。读取W寄存器,将会只读X的低32位;写W寄存器,将会将X的高32位写为0。也就是说设置W0为0xFFFFFFFF,结果设置X0为0x00000000FFFFFFFF。2、AArch64特殊寄存器除了31个核心寄存器外,还有一些特殊寄存器。在AArch64运行状态,异常返回的状态,保存在每个异常等级的.
ARM Cortex-A系列编程指南之ARMv8 A -- 第五章 ARMv8指令集介绍
ARMv8体系结构增加了64位指令集,是对现存的32位指令集的补充,被叫做A64(运行在AArch64运行状态下)。运行在AArch32运行状态下的指令集是A32和T32。如果想详细了解A64的汇编语言,可以参考Documentation – Arm Developer,《Arm Compiler armasm User Guide Version 6.12》。5.1 ARMv8指令集5.1.1 区分32位和64位A64指令在A64指令集的指令有2种形式,或者32位,或者64位。1)寄存
ARM Cortex-A系列编程指南之ARMv8 A -- 第六章 A64指令集
多数写应用程序的开发者不需要写汇编程序,但是当需要高度优化的代码的时候,汇编代码就变得很有用。这种情况包括写编译器代码,或者需要实现低层级特性但是C语言中又没有;启动代码、设备驱动、或者开发操作系统时也需要。会阅读汇编代码,也会对调试C语言时有帮助,特别是了解C语言和这些指令直接的映射关系。6.1 指令助记符A64的汇编语言重载实现了指令助记符,并根据操作数寄存器的名字来进行区分。比如ADD指令,有不同的参数,我们只需要记住ADD这个指令,汇编器会自动根据参数(操作数)来选择正确的调用:ADD
在浏览器里面运行命令行,真香!
上一篇我写过一篇《万物皆可 API》,这个项目就是把一些脚本的执行结果输出到了网页里面。 但是这个还是有很多改进空间,比如说 UI 能好看些,甚至能执行交互命令该多好,最后思来想去,它的究极形态不就是
Android筑基——ContentProvider 的跨进程启动过程和数据操作方法调用过程(基于api21)
目录1.前言2.正文2.1 小例子2.2 代码分析2.2.1 ContextWrapper.getContentResolver() 方法2.2.2 ContextImpl.getContentResolver() 方法2.2.3 ContentResolver.query() 方法2.2.4 ContentResolver.acquireUnstableProvider() 方法2.2.5 ApplicationContentResolver.acquireUnstableProvider() 方法2.2
[路飞]算法:105. 从前序与中序遍历序列构造二叉树
正题 105. 从前序与中序遍历序列构造二叉树 给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。 示例 1: 示例 2: 解析: 首先了解一下二叉树前
今日推荐
周排行