自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

elfprincexu的专栏

点滴积累 持之以恒

  • 博客(53)
  • 资源 (1)
  • 收藏
  • 关注

转载 深入理解linux下进程和线程的空间分配,进程栈和线程栈的空间分配

最近学习了下linux下进程和线程空间的分配原理,觉得有必要坐下总结,关于进程栈和线程栈总结:    (1)进程栈大小时执行时确定的,与编译链接无关    (2)进程栈大小是随机确认的,至少比线程栈要大,但不会超过2倍    (3)线程栈是固定大小的,可以使用ulimit -a 查看,使用ulimit -s 修改    (4)一般默认情况下,

2017-12-12 10:03:24 23191 3

原创 汇编语言学习小结

汇编语言是仅次于机器语言的底层语言,学习汇编语言可以让我们更好的理解CPU的工作方式和原理,可以帮我们更好的写好高级语言 我们通常使用的C,C++,C#语言都是基于汇编语言的高级语言。通常这些高级语言在机器中变为可执行文件的时候,都会经历以下几个步骤预处理(头文件引入,宏替换,内联函数替换等)编译(编译器会对文件进行语法检查) 汇编(会将上述高级语言转换为汇编语言 mov,add,sub

2017-07-27 15:39:42 683

转载 文件系统深度理解之inode解读

一、问题:   在一台Linux服务器的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间。    二、分析问题:   用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。inode译成中文就是索引节点,每个存储设备(例如

2017-04-11 11:35:52 3770

转载 计算机程序是如何运动的

关于《深入理解计算机系统》“这本书的中译名为“深入理解计算机系统”,我非常,十分,以及百分之一百二十地不满意。我这么说的原因在于这个译法完全扭曲了书的本意。如果直译原书名,应该是类似于“以程序员的视角理解计算机系统”,何来“深入”二字。可能在国内编辑看来,这是讲系统的,用C和汇编语言的,因此很“深入”,但我认为这只能说明国内技术氛围的浅薄。因为事实上,这是一本入门级别的书,这本书其实并不“

2017-03-17 17:01:31 1003

转载 计算机是如何启动的

从打开电源到开始操作,计算机的启动是一个非常复杂的过程。我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示…… 这几天,我查了一些资料,试图搞懂它。下面就是我整理的笔记。零、boot的含义先问一个问题,”启动”用英语怎么说?回答是boot。可是,boot原来的意思是靴子,”启动”与靴子有什么关系呢? 原来,这里的boot是bootstrap(

2017-03-17 17:00:15 495

转载 浅谈C/C++中static extern关键字的作用

static: 1. 修饰变量,表明该变量是静态变量,变量声明周期为整个程序,存放在静态数据区, (同时限定该变量的作用域)可能是局部静态变量,或者是本文件静态变量。  2. 修饰函数,和上面大同小异,3. 修饰类的变量和函数,表明该变量和函数属于类,不再仅仅是类的实例对象。extern:1. 放在变量和函数前,表明该变量和函数在别处已有定义,在该行只是声明

2016-07-18 16:07:41 3267

原创 Makefile 中命令的@,-@,+@符号 作用, 案例分析

make/makefile中的加号+,减号-和at号@的含义shell 命令每个目标都可以具有与其关联的一系列 shell 命令,这些命令通常用来创建目标。此脚本中的每一条命令都必须以制表符开始。虽然任何目标都能够显示在相关性行上,但除非使用 :: 操作符,否则这些相关性中只有一个能够通过创建脚本来跟随。如果命令行的第一个或前两个字符是 @ (at 符号)、

2016-07-12 10:33:49 11395

原创 网络工程师,路由器4种模式详解:AP,Router,Repeater,Bridger (接入点,无线路由,中继,桥接)

对于大多人来说使用路由器只会使用的就是PPPOE拨号,其他的都不是很懂,其实我们平时使用的是路由模式,那这次即将带来的各种模式有什么区别,又适合什么场合使用呢?这次就给朋友们说说路由器AP、路由、中继、桥接模式之间的区别。现在的路由大多数已经开始支持多中网络连接模式,那么我们就挑一款模式最全的路由来了解各种模式的区别吧。什么路由你猜对了么?当然是TP-Link迷你无线路

2016-06-23 16:39:28 38564 3

转载 详解如何编译一个跨平台GCC

How to Build a GCC Cross-CompilerGCC is not just a compiler. It’s an open source project that lets you build all kinds of compilers. Some compilers support multithreading; some support shared li

2016-06-22 13:22:28 5612

翻译 深入理解LINUX下动态库链接器/加载器ld-linux.so.2

最近在Linux 环境下开发,搞了好几天 Compiler 和 linker,觉得有必要来写一篇关于Linux环境下 ld.so的文章了,google上搜索了很多相关介绍性的文档,发现国内百度上却很少有相关类文档,觉得有必要来梳理一下:ld-linux.so.2 是linux下的动态库加载器/链接器,这篇文章主要来讲一下 ld-linux.so.2 是如何和Linux 以及相关

2016-06-17 17:18:07 18612

原创 Linux环境下最新版GCC安装总结--详细说明附案例(CentOS下安装最新版GCC 5.3.0)

1.  GCC这篇文章主要用来提供一些常见的指导,通常我们在安装GCC过程中都会出现常见的问题,官方的安装文件可以访问官方网址:  Installing GCC 我们主要从 “源文件来安装GCC” 因为不同的操作系统不同的版本已经GCC所需要的必要的软件的版本不同,我们通常都是在下载完源代码文件后根据自身电脑的配置来完成编译和安装。2. 下载GCC源代码GCC主

2016-06-14 10:54:13 6057

转载 详解C++各种智能指针: auto_ptr, shared_ptr, weak_ptr, scoped_ptr

C++ 中经常被问到的一个问题就是如何分辨各种智能指针。 先归纳起来做一个综合的比较: auto_ptrauto_ptr是现在标准库里面一个轻量级的智能指针的实现,存在于头文件 memory中,之所以说它是轻量级,是因为它只有一个成员变量(拥有对象的指针),相关的调用开销也非常小。auto_ptr在03标准中出现,是最早的C++标准库里的智能指针,主要是通过将指针通

2016-05-13 16:57:48 11995

原创 详解C/C++语言中Static 变量 或者 static函数的作用

1. 今天被问到C语言中Static假如修饰一个函数的话,这个Static 起到什么作用。之前因为特别注意到这个问题,但一时之间可能说不出全部,我回答了关于 作用域的区别,其实是对的,因为其他文件无法访问这个函数了,static把这个函数局限于在这个文件当中,某种意义上“隐藏了”这个函数,但不够具体。 在某个文件中,例如a.cc文件中,假如我们定义如下char a = 'A';

2016-05-13 14:29:57 709

转载 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]

转自于 : http://www.blogjava.net/fancydeepin/archive/2013/02/03/395073.html深度优先搜索算法(Depth First Search),是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现

2016-05-11 13:33:21 2879

转载 详解.net 中C# 编程中 堆(托管堆CLR) 和 栈

转载于 http://www.c-sharpcorner.com/article/C-Sharp-heaping-vs-stacking-in-net-part-ii/Even though with the .NET framework we don't have to actively worry about memory management and garbage co

2016-05-10 15:16:35 1691

转载 详解数据库三种删除方法: delete drop truncate

DeleteDelete :删除数据表中的行(可以删除某一行,也可以在不删除数据表的情况下删除所有行)。删除某一行:Delete from 数据表名称 where 列名称=值;删除所有行:Delete * from 数据表名称DropDrop :删除数据表或数据库,或删除数据表字段。删除数据库:drop database 数据库名称

2016-05-10 10:35:02 6684

转载 详解数据库设计准则: 第一范式,第二范式,第三范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。                 在实际开发中最为常见的设计范式有三个:1.第一范式(确保每列保持原子性)第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值

2016-05-10 10:19:10 6527

转载 C++11新特性: 右值引用 和 右值语义(rvalue sematics)

转载于 http://blog.csdn.net/zwvista/article/details/12306283#comments 右值引用为了解决移动语义及完美转发问题,C++11标准引入了右值引用(rvalue reference)这一重要的新概念。右值引用采用T&&这一语法形式,比传统的引用T&(如今被称作左值引用 lvalue reference)多一个&

2016-05-09 12:43:14 1223

原创 C++基础知识: 公有继承,保护继承,私有继承的总结,私有继承的用意何在

今天被问到C++中私有继承的作用是什么?第一反应是关于访问权限的改变,基类被子类私有继承后,基类中即使是共有public,保护protected的成员变量或者成员函数都会在子类中变为私有成员和私有成员变量,子类的派生类或者子类的对象再也无法访问这些成员和成员变量。其实,这个回答只答出了最为基本的概念,那就是私有继承对访问权限的改变。 但是,更为深处的理解是,既然私有继承这么小众化,为什

2015-12-11 00:15:55 1141

转载 经典算法: 堆排序的原理和实现, 建立堆,调整堆

1.堆  堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:  Key[i]=Key[2i+1]&&key>=key[2i+2]  即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。  堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足 Key[i]2.堆排序的思想   利用大

2015-12-09 20:58:53 8419 1

转载 经典算法:超大数组,取出最大N数

转载于:http://blog.csdn.net/yanzi1225627/article/details/8109035这里先讲一种类似于快速排序的方法。注意题目要求,不要求完全排序,只要求最快解决问题!这个题是我面试NI公司时,对方问我的。原话是从1亿个数据里,找出前一百个最大的。首先看源码吧:void findMaxN(int a[], int start, in

2015-12-09 11:09:04 4014

转载 经典算法: Bit-Map 处理海量数据(上亿数据)

版权声明:转载于http://blog.csdn.net/hguisu/article/details/7880288目录(?)[-]1 Bit Map算法简介2 Bit Map的基本思想3 Map映射表3 位移转换 3 扩展         Bloom filter可以看做是对bit-map的扩展 4 Bit-Map的应用5 Bit-Map的具体实现

2015-12-09 10:40:00 1028

转载 Linux:多进程访问同一文件,如何用文件锁进行保护, fcntl()详解

在Linux系统中,进程运行在自己的虚拟内存空间中,如何协调不同虚拟地址空间中的进程访问一个非共享资源,文件加锁是基本进程通信方法之一。 可以使用fcntl()、lockf()、flock()实现文件锁,进而实现进程之间的通信。 1.fcntl()【函数介绍】调用形式(执行失败返回-1):int fcntl(int fd,int cmd);

2015-12-04 15:20:25 3029

原创 C++ JAVA下回调函数机制和原理比较分析

何为回调函数,关键二字在于回调,意思就是可以方便的回去调用某个函数。#include void printWelcome(int len){ printf("欢迎欢迎 -- %d/n", len);} void printGoodbye(int len){ printf("送客送客 -- %d/n", len);} void callb

2015-11-04 16:21:43 923

转载 Linux: 学习如何制作RPM包, SPEC文件如何编写

一 RPM介绍RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理;现在应为RPM Package Manager的缩写。在Fedora、Redhat、Mandriva、SuSE、YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用; RPM包中除了包括

2015-08-27 11:07:47 3941

原创 Linux下创建维护服务进程Daemon的注意点,附有详细案例讲解

unix系统下所有进程都工作在前台和后台,在前台工作的进程通常和用户直接交互(通常是通过terminal,比如我们ls -ltr,会在当前terminal显示文件列表),但是在后台运行的进程都是自己运行。用户可以检查它的工作状态,但是不知道它在干嘛。维护进程指的就是这种工作在后台的进程。接下来分几步来讲解下如何创建一个维护进程,并且实现标准输入输出重定向的工作。1. 维护进

2015-04-28 16:55:53 716

转载 unix/linux创建新进程,父子进程详解,附有案例

fork()用来创建进程fork(void)在linux中所有进程都是由init进程直接或间接创建成功:在父进程中将返回子进程的PID;子进程返回0,以区别父进程失败:父进程中返回-1 1 #include 2 #include 3 #include 4 5 int main(int argc,char *argv[]) 6 {

2015-04-28 10:25:18 8223

转载 unix/linux下信号处理函数Signal()详解

signal()函数理解在 这个头文件中。signal(参数1,参数2);参数1:我们要进行处理的信号。系统的信号我们可以再终端键入 kill -l查看(共64个)。其实这些信号时系统定义的宏。参数2:我们处理的方式(是系统默认还是忽略还是捕获)。一般有3中方式进行操作。(1)eg: signal(SIGINT ,SIG_ING );//SI

2015-04-28 10:08:10 7162 1

原创 C++易混知识点 6: 如何通过生命周期使用mutex互斥锁自动加锁和释放

在涉及到多线程操作的时候,对于那些静态变量我们一定要加以保护。我们通常会使用到的是互斥锁,通过对锁的获取和释放来保证始终只有一个线程对关键数据进行操作,但这样带来的问题也是很直接的: 繁琐的操作。1. 首先我们先定义一个互斥锁的类,class EfMutex{ public: EfMutex(int type = PTHREAD_MUTEX_RECURSIVE) :

2015-04-15 14:36:24 1807

转载 Linux 下 套接字 Socket 通信原理和实践,附有详细案例

我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下:1、网络中进程之间如何通信?2、Socket是什么?

2015-04-15 10:18:13 3811 3

转载 gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解

一、概述C和C++编译器是集成的,编译一般分为四个步骤:预处理(preprocessing)编译(compilation)汇编(assembly)  -------------------- as连接(linking) --------------------- ld gcc  认为预处理的文件是(.i)是C文件,并且设定C形式的连接;g++  认为

2015-04-14 16:35:22 23154 5

原创 编写一个简单的license文件控制器

编写一个很简单的通过文件内容读取相关key/value的权限控制器:文件内容可以如下:#注释Car.IsPrivate  True通过阅读以上的文件来获得软件所有的权限控制。1. 先编辑一个存储 key/value 对的数据结构 KVPairstruct KVPair { KVPair(void) : _keu(), _val

2015-04-14 10:00:57 1199

转载 CUDA编程深入浅出,案列讲解

CUDA 是 NVIDIA 的 GPGPU 模型,它使用 C 语言为基础,可以直接以大多数人熟悉的 C 语言,写出在显示芯片上执行的程序,而不需要去学习特定的显示芯片的指令或是特殊的结构。”编者注:NVIDIA的GeFoce 8800GTX发布后,它的通用计算架构CUDA经过一年多的推广后,现在已经在有相当多的论文发表,在商业应用软件等方面也初步出现了视频编解码、金融、地质勘探、科

2015-04-01 15:30:00 866

原创 GDB 调试积累心得,断点,查栈,下一步,跳入,跳出等简单操作

调试相关程序,直接在binary加gdb调试gdb ./bin.x86_64/Regression进入后, 1. 添加断点b   ParamsTest.cc:3562. 开始运行run3. 程序停在断点处,单步调试(进入)s4. 查看当前代码l5. 单步调试(不进入)n6. 跳出当前代码(之前跳入调试)finish7. 继续单步调试

2015-03-03 18:54:28 12327

原创 Linux环境编程1. 实例详解文件锁(file lock)的两种不同类型,advisory lock和mandatory lock

文件锁(File Lock)是一种在特定的时间内只允许一个进程进行访问文件的机制,通过使用文件锁,可以使得多进程访问文件更加安全。在这片文章中,我们会探索两种不同的文件锁,并且通过实际案例去了解他们的机制和不同之处。我们会举以下两个例子来解释为什么文件锁(file lock)是必须的

2015-02-06 15:30:59 7784

原创 Linux下编辑文件方式Emacs 操作快速指南,快捷键速记

这两天一直在熟悉Emacs,之前linux环境下用的最多的是VIM,没有其他原因,就是因为VIM容易记,快捷性强,很容易上手。这不,刚开始学Emacs的时候,觉得很不适应,组合键太多,给人的第一印象就是难学难记,不过,还是印着头皮操作了一把,发现EMACS的好处是很明显的,扩展性很强,组合键一旦掌握之后就能很熟练的操作。十分便捷和快速。

2015-02-03 14:52:05 2782

原创 C++易混知识点5:实例讲解Public Protected Private作用域,继承的区别和用意

大学生涯,涉及到类的作用域,继承都是用的public 共有继承,当时也没想那么多,觉得共有继承多方便,多简单,反正没有太多的限制,不管是类的成员或者是基类的成员函数都可以访问。没有深究。其实这里面真是涉及到了C++面向对象设计当中的封装特性。只暴露那些需要的成员和成员函数,不必过多曝露所有的成员。第一:private、public、protected访问的范围。        pr

2015-01-30 14:51:59 1847

原创 C++易混知识点4: 自己编写一个智能指针(Reference Counting)学习auto_ptr和reference counting

这篇文章建大的介绍了如何编写一个智能指针。介绍: 什么是智能指针?答案想必大家都知道,智能指针的目的就是更好的管理好内存和动态分配的资源,智能指针是一个智能的指针,顾名思义,他可以帮助我们管理内存。不必担心内存泄露的问题。实际上,智能指针是一个行为类似于指针的类,通过这个类我们来管理动态内存的分配和销毁。方便客户端的使用。相比于一般指针,智能指针主要体现在它使用的容易和便捷性。

2015-01-28 15:25:24 767

原创 C++易混知识点3. New Operator, Operator New, Placement New 实例分析,比较区别

我们知道,C++中引入了New 这个内置符号,很大方便了指针的使用,程序员不必关注与这块堆上新分配的内存是如何来的,如何初始化的,然后如何转换为我们想要的类型指针的。现在,我们重点来分析下这个NEW内置符号背后的步骤和所调用到的函数。1. New Operator (__type__ * a = new a();)C 语言当中,我们在新申请一块内存的时候,通常使用的是malloc,

2015-01-23 14:28:27 701

原创 C++易混知识点2. 函数指针和指针函数的区别

我们时常在C++开发中用到指针,指针的好处是开销很小,可以很方便的用来实现想要的功能,当然,这里也要涉及到指针的一些基本概念。指针不是基本数据类型,我们可以理解他为一种特殊类型的对象,他占据一定空间,但是所带来的好处就是C++如此强大的深层次原因了。1. 指针函数, ( __type__ * func( void, int,) )顾名思义,他是一个函数,只不过和一般函数区分

2015-01-22 14:41:38 557

QT 实现简单功能的俄罗斯方块

QT 简单实现俄罗斯方块的源代码并且附上教程说明文档,适合初学者快速上手学习QT,简单实用,希望大家一起进步!

2012-05-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除