c
sunshineywz
这个作者很懒,什么都没留下…
展开
-
C++11智能指针:unique_ptr使用简介
我们知道auto_ptr通过复制构造或者通过=赋值后,原来的auto_ptr对象就报废了.所有权转移到新的对象中去了.而通过shared_ptr可以让多个智能指针对象同时拥有某一块内存的访问权.但假如我们不希望多个内存块被多个智能指针对象共享,同时又不会像auto_ptr那样不知不觉的就让原来的auto_ptr对象失效,可咋整呢?这个时候就要使用unique_ptr了,顾名思义嘛,unique是唯一的意思.说明它跟auto_ptr有点类似,就是同时只能有一个智能指针对象指向某块内存.但它还有些其他特性.原创 2021-10-11 23:54:09 · 371 阅读 · 0 评论 -
tree2dotx
#!/bin/bash## tree2dotx --- transfer a "tree"(such as the result of tree,calltree,cflow -b)# to a picture discribed by DOT language(provided by Graphviz)## Author: falcon <wuzhangjin@gmail.com># Update: 2007-11-14, 2015-3-19# U原创 2021-06-17 20:39:21 · 629 阅读 · 0 评论 -
callgraph
#!/bin/bash## callgraph -- Generate a callgraph of a specified function in specified file/directory## -- Based on cflow and tree2dotx## Usage:## $ callgraph## -f func_name# -d directory|file# -F f原创 2021-05-18 15:21:00 · 247 阅读 · 0 评论 -
Unwind 栈回溯详解
Unwind 栈回溯详解https://blog.csdn.net/pwl999/article/details/107569603内核中dump_stack()的实现,并在用户态模拟dump_stack()【转】https://www.cnblogs.com/sky-heaven/p/10386600.html嵌入式系统C编程之堆栈回溯https://www.cnblogs.com/clover-toeic/p/3949896.html...原创 2021-04-25 09:15:22 · 611 阅读 · 0 评论 -
私有库
董工,你们环保模式开关后代码逻辑上都有一些什么差异NT基线代码使用的开源库如下组件名称:blas 对应的库: kws_lib/hikspeech-kws.a ----------------- 对应的版本:OpenBLAS-0.3.7 下载的链接: https://github.com/xianyi/OpenBLAS/r原创 2020-11-30 09:10:37 · 555 阅读 · 0 评论 -
awk ‘{print $1,$2,$14,$15}‘ /proc/`pidof hik_demo`/task/*/stat
awk '{print $1,$2,$14,$15}' /proc/`pidof hik_demo`/task/*/stat原创 2020-10-27 08:58:27 · 338 阅读 · 0 评论 -
task_struct
1、进程的基本信息1.1 标识一个进程——PID每个进程都必须拥有它自己的进程描述符;因此,即使共享内核大部分数据结构的轻量级进程(后面会提到),也有它们自己的task_struct结构。进程和进程描述符之间有非常严格的一一对应关系,所以我们可以方便地使用32位进程描述符地址标识进程。进程描述符指针(task_struct*)指向这些地址。内核对进程的大部份引用都是通过进程描述符指针...原创 2020-10-27 08:58:15 · 1465 阅读 · 0 评论 -
关于apt-get source下载源码包的问题
e.g. 下载 ls的源码包1>which ls //得到 /bin/ls2>dpkg-query -S /bin/ls //会得到包名 ,e.g. coreutils:/bin/ls3>sudo apt-get source coreutils //下载原创 2020-10-11 11:40:43 · 938 阅读 · 0 评论 -
Linux简单线程池实现(带源码)
一.线程池简介为什么使用线程池?目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务器等都具有一个共同点,就是单位时间内必须处理数目巨大的连接请求,但处理时间却相对较短。 传统多线程方案中我们采用的服务器模型则是一旦接受到请求之后,即创建一个新的线程,由该线程执行任务。任务执行完毕后,线程退出,这就是是“即时创建,即 时销毁”的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器将处于不停的创建线程,销毁线程原创 2020-08-24 08:45:12 · 302 阅读 · 0 评论 -
C语言实现模版
C语言有两把双刃剑,一把是“指针”,另一把是“宏”。这回咱就用“宏”来实现C++中才有的模版。这里的模版实现一个很简单的加法函数,同一个函数代码可以处理不同类型的加法运算。C++的实现template <class T>T add(T a, T b){ return a + b;}#include <stdio.h>int main(int argc...原创 2020-02-09 20:31:14 · 186 阅读 · 0 评论 -
策略模式C语言实现
策略模式C语言实现原创tandesir 最后发布于2013-03-09 17:47:59 阅读数 3621 收藏展开【说明】策略模式的C语言实现,实现了3种排序算法的灵活切换。【代码清单】typedef.h/* Author : tandesir Time : 2013-03-09 借鉴Li XianJing部分代码, 感谢 Li XianJing <xianjiml...原创 2020-02-09 20:34:43 · 789 阅读 · 0 评论 -
gdb深入学习手册
1.4 log如果你想把GDB命令输出到一个文件有,有几种方法控制set logging onset logging offset logging file <filename>set logging overwrite [on|off] #默认会追加到logfile里set logging redirect [on|off] #默认GDB输出会在terminal和logfile里显示,用redirect让它只在logfile里显示show logging原创 2020-07-15 08:40:40 · 332 阅读 · 0 评论 -
《C语言的面向对象(面向较大型软件)》ppt分享和ppt注解
解释面向对象封装、继承、多态的原理,并举了吃饭的例子,比如婴儿是拿奶瓶,而其他人是拿筷子。这边会进一步解释派生类覆盖上层类函数。以大象进冰箱例子,解释对象思维和过程思维的差异。这页讲C语言如何模拟C++的类,但是其实我们只是想用对象式思想,而不是为了追求形式上的模拟这页讲一个WAV文件的头部,如果用结构体进行“封装”,可以极大地改善代码的质量。如果我们要做一个命令解析器,输入一个...原创 2020-07-14 09:05:55 · 210 阅读 · 0 评论 -
Linux 下如何绕过编译器优化
程序加载上下文传递系统调用内存布局进程调度代码调试程序退出有同学在群里聊到编译器优化的事情,很多时候期望编译器默认做优化,但是有些场景是希望能绕过的,哪些呢?这里举两个实实在在的例子。第一个,在调试的时候,如果默认开启了优化,要关注的某个变量值,用 gdb打印时可能会提示被优化掉了,会让人丈二和尚摸不着头脑。第二个,就是某些场景,编译器并不理解背后的实际情况,比如说,连续往某个...原创 2020-04-20 09:02:26 · 683 阅读 · 0 评论 -
宋宝华: 关于Linux编译优化几个必须掌握的姿势
01编译选项和内核编译首先我们都知道,Linux内核如果用O0编译,是无法编译过的,Linux的内核编译,要么是O2,要么是Os,这点从Linux的Makefile里面可以看出:当选择了CONFIG_CC_OPTIMIZE_FOR_SIZE它会是Os,否则就是O2。其实O2和Os,都是一些优化选项的集合:gcc -c -Q -O2 --help=optimizers > /tm...原创 2020-04-20 09:02:46 · 638 阅读 · 0 评论 -
动态链接的步骤与实现
阅读目录动态链接器的自举装载共享对象符号的优先级全局符号介入与地址无关代码重定位与初始化linux动态链接器的实现正文1. 动态链接器的自举我们知道动态链接器本身也是一个共享对象,但是事实上它有一些特殊性。对于普通共享对象文件来说,它的重定位工作由动态链接器来完成。他也可以依赖其他共享对象,其中的被依赖共享对象由动态链接器负责链接和装载。可是对于动态链接器来说,它的重定位工作由谁来完成?它是否可以依赖于其他共享对象?这是一个“鸡生蛋,蛋生鸡”的问题,为了解决这种无休止的循环,动原创 2020-05-20 22:06:52 · 1379 阅读 · 0 评论 -
glibc内存管理那些事儿
Linux内存空间简介Linux提供了如下几个系统调用,用于内存分配:brk()/sbrk() // 通过移动Heap堆顶指针brk,达到增加内存目的mmap()/munmap() // 通过文件影射的方式,把文件映射到mmap区这两种方式分配的都是虚拟内存,没有分配物理内存。在第一次访问已分配的虚拟地址空间的时候,发生缺页中断,操作系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。那么,既然brk、mmap提供了内存分配的功能,直接使用brk、mmap进行内存管理不是更简单吗,为原创 2020-06-14 14:30:51 · 540 阅读 · 0 评论 -
gcc 选项
下列选项与具体语言无关: --debug 此开关缺少可用文档 --dump 此开关缺少可用文档 --dump= 此开关缺少可用文档 --dumpbase 此开关缺少可用文档 --dumpdir 此开关缺少可用文档 --extra-warnings 此开关缺少可用文档 -原创 2020-06-14 14:30:40 · 779 阅读 · 0 评论 -
高级语言的编译:链接及装载过程介绍
目标文件的链接首先我们尝试一下对上一小节得到的目标文件链接一下看看有什么结果:gcc test.o -o testtest.o: In function `main':test.c:(.text+0x2c): undefined reference to `g_x'collect2: ld returned 1 exit status当我们尝试把这个目标文件进行链接成为可执行文件时,链接器报错了。因为我们之前通过变量声明承诺过的变量并没有在其他的目标文件或者库文件中找到,所以链接器无法得到一个原创 2020-06-14 14:29:48 · 519 阅读 · 0 评论