linux
hust_sheng
这个作者很懒,什么都没留下…
展开
-
动态链接的一点小总结 《程序员的自我修养》·笔记
动态链接的一点小总结动态链接(相对于静态链接)的优势动态链接可以节省内存和磁盘空间。动态链接使得内存和磁盘中的编译完成的目标文件只保留一份,这样也可以减少物理页的换入换出,同时也可以增加CPU缓存的命中率。动态链接便于程序的更新、部署、发布;动态链接下,程序在运行期间可以动态地加载各种程序模块,也就是我们经常说的插件;动态链接可以加强程序的兼容性,程序和不同平台之间可以加入一个“中间层”,让原创 2015-08-22 16:32:01 · 2912 阅读 · 1 评论 -
Linux中的正则表达式
Linux中的正则表达式标签:linux基础的正则表达式.(一个点) [root@localhost ~]# grep 'r..t' /etc/passwd 上述命令可以找出/etc/passwd中含有’r..t’的行。* “*”符号用于匹配前一个字符0次或任意多次; “*”符号经常和“.”符号加在一起使用,比如“.*”代表任意长度的不包含换行的字符。\{n,m\}\{n\}匹配前面的原创 2015-10-09 10:34:10 · 786 阅读 · 1 评论 -
内存、栈、堆的一点小总结 《程序员的自我修养》·笔记
内存、栈、堆的一点小总结程序的内存布局 【前言】在32位系统中,大家可能认为我们可以用一个32位的指针访问任意内存地址。如下: int *p = (int *)0x12345678; ++*p; 但事实上用户可以直接读取的内存大小是达不到4GB的。大多数操作系统都会将其中的一部分分配给内核使用,应用程序是无法直接访问这一段内存的,这部分被称为内核空间。Linux默认将高地址的1GB空间原创 2015-08-24 10:15:47 · 4172 阅读 · 0 评论 -
linux中的前台任务、后台任务和守护进程
前台任务、后台任务和守护进程标签:linux内容参考:http://www.ruanyifeng.com/blog/2016/02/linux-daemon.html前台任务特点 ”前台任务”(foreground job)是独占命令行窗口的任务,只有运行完了或者手动中止该任务,才能执行其他命令。后台任务简介 与前台任务相对应,在多任务系统中,有一些任务在运行的时候,并不需要与用户交原创 2016-02-29 17:03:45 · 4634 阅读 · 0 评论 -
C/C++中的重复定义bug
C中的全局变量的使用标签(空格分隔):c/c++使用不当很容易出现重定义的bug可以重复声明,不可以重复定义 在.h头文件中,变量如果没有初始化就是声明;初始化了就是定义。所以很多代码里面,都把变量的声明放在.h文件中当作全局变量使用,这是可以的,但如果这样使用的话是不能进行初始化的。一旦对.h中声明的变量进行了初始化也就相当于进行了定义,就可能出现重复定义的bug。或许可行的解决方案#i原创 2016-03-07 21:20:07 · 10200 阅读 · 2 评论 -
Linux系统下的启动流程&运行级别&用户管理
Linux系统命令之系统启动流程【计算机加载BIOS】 该过程中最重要的一步就是对自身硬件的健康检查,这种通电之后的自检过程叫做“加电自检”,简称POST。【系统引导】 BIOS默认会从硬盘上的第0柱面、第0磁道、第一个扇区中读取被称为MBR的东西,即主引导记录。 一个扇区的大小是512字节,存放的内容是一段引导程序和分区信息,其中引导程序部分占用446字节,另外64字节是磁盘原创 2015-09-28 15:21:20 · 646 阅读 · 0 评论 -
ubuntu14.04下配置cuda8.0以及测试OpenCL(测试通过)
标签(空格分隔):linux cuda OpenCL环境: 系统:ubuntu14.04(linux) 显卡:NVIDIA cuda版本:cuda8.0安装cuda8.0(使用deb安装)并测试官方下载安装包:https://developer.nvidia.com/cuda-downloads 这里我使用的是基于ubuntu14.04的deb的local版本 下载完成之后参考 CUDA原创 2016-12-03 15:35:05 · 6693 阅读 · 4 评论 -
Linux下的编辑器:vi和vim
Linux下的编辑器:vi和vim标签: linuxvi和vim vim编辑器是vi的加强版,在简单的文本操作上与vi几乎完全一致。vi vi编辑器有3种模式,分别是一般模式、编辑模式、末行指令模式。三种模式的关系如下,这里不再赘述。 vi的一些基本操作 vi的光标移动操作: vi的编辑操作: vim的强化操作 多行操作 vim支持多行编辑,而vi每次只能处理一行。进入原创 2015-10-08 16:48:45 · 553 阅读 · 0 评论 -
静态链接的一点小总结(一) 《程序员的自我修养》·笔记
静态链接的引入编译过程生成目标代码之后,定义其他模块的全局变量和函数在最终运行时的绝对地址要在最终链接的时候才能确定。所以现在的编译器将源代码文件编译成为一个未链接的目标文件,之后由链接器将这些目标文件链接起来形成可执行文件。c/c++模块之间的通信有两种方式,一种是模块间的函数调用,另一种是模块间的变量访问。这两种方式可以亏结尾一种方式,那就是模块之间符号的引用。模块之间依靠符号来进行通信,就原创 2015-08-11 21:03:07 · 639 阅读 · 0 评论 -
main函数执行前后 《程序员的自我修养》·笔记
【前言】main函数执行前后的宏观过程(C++)linux系统下压板程序的入口是”_start”,这个函数是linux系统库(Glibc)的一部分,当我们的程序和Glibc链接在一起形成最终的可执行文件的之后,这个函数就是程序执行初始化的入口函数。程序初始化部分完成一系列初始化过程之后,会调用main函数来执行程序的主体。在main函数执行完成以后,再返回到初始化部分,进行一些清理工作,然后结束原创 2015-08-24 13:08:18 · 1367 阅读 · 1 评论 -
内存映像文件简介
内存映像文件 几乎每个应用程序都要和文件打交道。比如,应用程序有时需要打开、读取、再关闭文件;而有时需要打开文件,将数据读到一个缓冲区再写回到文件中另一个位置。通常实现起来都显得有点繁琐。Microsoft Windows提供了满足这两方面要求的最佳解决途径: 内存映像文件。 像使用虚拟内存一样,使用内存映像文件同样需要经过保留和提交两个过程,首先在进程内存空间保留一块区域转载 2015-08-07 10:32:41 · 3580 阅读 · 0 评论 -
栈内存和堆内存
形象化的理解:Object obj = new Object();以上这句话,会把obj这个引用放进栈内存,再说白一点,就是这个对象的名字obj放进栈内存,栈内存运行速度较快,用于查找索引(也就是名字) 而new Object()会在堆内存中开辟一块空间给这个对象,对象几乎所有的属性啊,方法啊,全都在里面了,也就是对象的实体都在堆内存中,堆内存速度慢但是成本低,空间较大,用以存放程序转载 2015-08-06 09:25:26 · 563 阅读 · 0 评论 -
可执行文件的装载与进程的一点小总结 《程序员的自我修养》·笔记
可执行文件的装载与进程小结进程的虚拟地址空间 每个程序被运行起来之后都拥有自己独立的虚拟地址空间,这个虚拟地址空间的大小是CPU的位数决定的。比如,32位的硬件平台决定了虚拟地址空间的地址为(2^32-1),也就是我们常说的4GB虚拟内存的大小。 需要注意的是,分配的4GB的虚拟空间并不是全部给进程的,比如,linux下1GB给操作系统,余下的3GB中基本上都分配给进程,但是3GB中的原创 2015-08-15 22:18:06 · 1407 阅读 · 0 评论 -
目标文件、ELF文件的一点小总结 《程序员的自我修养》·笔记
目标文件源代码编译后但是没有进行链接的那些中间文件,比如win下的.obj文件、linux下的.o文件,与可执行文件的内容以及格式很类似。目标文件中的内容至少有编译后的机器指令代码、数据。还包括连接时所需要的一些信息,比如符号表、调试信息、字符串等。一般,目标文件会将这些信息按照不同的属性进行分段(其实就是多个一定长度的区域)。下面主要对linux下的可执行文件的ELF格式进行分析ELF文件的原创 2015-08-12 21:31:04 · 1396 阅读 · 0 评论 -
栈内存和堆内存的一点小结 《程序员的自我修养》·笔记
栈内存和堆内存形象化的理解: Object obj = new Object(); 以上这句话,会把obj这个引用放进栈内存,再说白一点,就是这个对象的名字obj放进栈内存,栈内存运行速度较快,用于查找索引(也就是名字) 而new Object()会在堆内存中开辟一块空间给这个对象,对象几乎所有的属性啊,方法啊,全都在里面了,也就是对象的实体都在堆内存中,堆内存速度慢但是成本低,空间原创 2015-08-13 09:55:36 · 582 阅读 · 0 评论 -
内核线程与用户线程的一点总结 《程序员的自我修养》·笔记
前言linux内核不存在整真正意义上的线程。linux将所有的执行实体都称之为任务(task),每一个任务在干年上都类似于一个单线程的进程,具有内存空间、执行实体、文件资源等。但是,linux下不同任务之间可以选择公用内存空间,因而在实际意义上,共享同一个内存空间的多个任务构成了一个进程,而这些任务就成为这个任务里面的线程。内核线程内线程又称为守护进程,Linux内核使用内核线程来将内核分成几原创 2015-08-11 11:33:50 · 1219 阅读 · 0 评论 -
静态链接的一点小总结(二) 《程序员的自我修养》·笔记
静态链接的一点小总结(二)空间与地址分配问题引入 可执行文件与目标文件的格式是类似的,所以,可以说可执行文件中的代码段和数据段都是由输入的目标文件中合并而来的。 解决方法:按序叠加 顾名思义,该方法就是将各个目标文件依次合并叠加 问题 合并的过程中,每个段都需要有一定的地址和空间的对齐要求,对于规模稍大的应用程序,对应的输出文件会有成百上千的段,很显然,这种做法很浪费空间原创 2015-08-14 11:52:49 · 687 阅读 · 0 评论 -
ubuntu下使用VScode打开本地使用makefile编译的工程(包括命令行参数的配置)
ubuntu下使用VScode打开本地使用makefile编译的工程(命令行参数的配标签(空格分隔):vs opencv安装VScode网上有很多安装教程,较为简单。安装需要注意的是,如果debug对象是c/c++的话,要先安装相关的依赖。VScode安装依赖的一般方法快捷键:ctrl p输入 >ext install,选择”扩展:安装扩展” 在左侧选择相应的扩展程序 C++(GDB) 进行安原创 2017-03-24 12:37:14 · 11615 阅读 · 0 评论