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..
分类: 其他 发布时间: 01-03 23:28 阅读次数: 0

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.
分类: 其他 发布时间: 01-03 23:28 阅读次数: 0

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)
分类: 其他 发布时间: 01-03 23:28 阅读次数: 0

Linux内存那些事 -- VSS、RSS、PSS、USS

1、背景如果一个进程内存消耗太多,那么会导致整个系统内存紧张,而出现OOM等。所以我们经常会需要统计整个系统各个进程内存消耗的情况。一般对一个进程的内存的表示有4种方式:VSS、RSS、PSS、USS,那么什么时候应该用哪种方式统计呢?我们需要先了解他们的差别:VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的全部内存,以及分配但未使用内存)RSS- Resident Set Size 实际使用物理内存(包含共享库占用的全部内存)PSS- Proportional S
分类: 其他 发布时间: 01-03 23:28 阅读次数: 0

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
分类: 其他 发布时间: 01-03 23:28 阅读次数: 0

ARM Cortex-A系列编程指南之ARMv8 A

此系列文章是对《ARM® Cortex®-A Series Programmer's Guide for ARMv8-A》的重点解读,目的是对ARMv8 A的官方编程指南进行解读和重点内容整理,方便网友和自己深入使用。其下载路径在:Documentation – Arm Developer=========================================================================注意:本文为本人原创,版权所属为个人所有,欢迎转载,但是转载
分类: 其他 发布时间: 01-03 23:28 阅读次数: 0

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
分类: 其他 发布时间: 01-03 23:28 阅读次数: 0

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®
分类: 其他 发布时间: 01-03 23:28 阅读次数: 0

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.
分类: 其他 发布时间: 01-03 23:28 阅读次数: 0

ARM Cortex-A系列编程指南之ARMv8 A -- 第三章 ARMv8基础

1、异常等级ARMv8处理器运行时,运行在4种异常等级的其中一个等级。和ARMv7的特权等级类似,在AArch64运行状态,异常等级决定了特权等级。EL0~EL3,数字越高,异常等级越高。EL0 普通用户应用 EL1 操作系统内核 EL2 Hypervisor EL3 低层级固件(包括Secure Monitor) 一般情况下,应用程序、操作系统内核、Hypervisor,占有一个单独的异常等级。但是有个例外,就是像KVM这样的在内核中的Hyperviso
分类: 其他 发布时间: 01-03 23:28 阅读次数: 0

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运行状态,异常返回的状态,保存在每个异常等级的.
分类: 其他 发布时间: 01-03 23:28 阅读次数: 0

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)寄存
分类: 其他 发布时间: 01-03 23:28 阅读次数: 0

ARM Cortex-A系列编程指南之ARMv8 A -- 第六章 A64指令集

多数写应用程序的开发者不需要写汇编程序,但是当需要高度优化的代码的时候,汇编代码就变得很有用。这种情况包括写编译器代码,或者需要实现低层级特性但是C语言中又没有;启动代码、设备驱动、或者开发操作系统时也需要。会阅读汇编代码,也会对调试C语言时有帮助,特别是了解C语言和这些指令直接的映射关系。6.1 指令助记符A64的汇编语言重载实现了指令助记符,并根据操作数寄存器的名字来进行区分。比如ADD指令,有不同的参数,我们只需要记住ADD这个指令,汇编器会自动根据参数(操作数)来选择正确的调用:ADD
分类: 其他 发布时间: 01-03 23:28 阅读次数: 0

万物皆可 API

今天看到一个开源项目,叫做 Command2API,感觉挺有意思的,分享给大家。 起源 关于这个项目为什么诞生,原 Repo 有这么一段: 反正大意就是说,有些命令的执行结果如果能够通过 HTTP的
分类: 编程语言 发布时间: 01-03 23:09 阅读次数: 0

在浏览器里面运行命令行,真香!

上一篇我写过一篇《万物皆可 API》,这个项目就是把一些脚本的执行结果输出到了网页里面。 但是这个还是有很多改进空间,比如说 UI 能好看些,甚至能执行交互命令该多好,最后思来想去,它的究极形态不就是
分类: 编程语言 发布时间: 01-03 23:09 阅读次数: 0

Google 推荐使用 MVI 架构?卷起来了~

查看最新的 Android应用架构指南,可以发现Google 已经开始推荐使用 MVI 架构了,快来了解一下吧 ~
分类: 编程语言 发布时间: 01-03 22:36 阅读次数: 0

一份简单够用的 Nginx Location 配置讲解

Location 是 Nginx 中一个非常核心的配置,这篇重点讲解一下 Location 的配置问题以及一些注意事项。
分类: 编程语言 发布时间: 01-03 20:56 阅读次数: 0

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
分类: 移动开发 发布时间: 01-03 20:38 阅读次数: 0

生存与斗争2 公告-基础功能搭建完毕

生存与斗争
分类: 企业开发 发布时间: 01-03 20:38 阅读次数: 0

[路飞]算法:105. 从前序与中序遍历序列构造二叉树

正题 105. 从前序与中序遍历序列构造二叉树 给定一棵树的前序遍历 preorder 与中序遍历  inorder。请构造二叉树并返回其根节点。 示例 1: 示例 2: 解析: 首先了解一下二叉树前
分类: 编程语言 发布时间: 01-03 20:22 阅读次数: 0