程序设计
文章平均质量分 80
coloriy
这个作者很懒,什么都没留下…
展开
-
MVC框架设计思想与设计理念
尽管MVC早已不是什么新鲜话题了,但是从近些年一些优秀MVC框架的设计上,我们还是会发现MVC在架构设计上的一些新亮点。本文将对传统MVC架构中的一些弊病进行解读,了解一些优秀MVC框架是如何化解这些问题的,揭示其中所折射出的设计思想与设计理念。MVC回顾转载 2011-08-17 13:34:51 · 633 阅读 · 0 评论 -
gcc编译参数-fPIC的一些问题
-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code), 则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意 位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。gcc -shared -fPIC -o 1.so 1.c这里有一个-fPIC参数转载 2015-08-10 14:06:45 · 407 阅读 · 0 评论 -
加解密系统基础概念
对称加密 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。 需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。 所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解转载 2015-08-10 14:36:14 · 938 阅读 · 0 评论 -
LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
使用VisualStudio 编译链接中可能出现如下错误:LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt网上有如下解决方法:1. disable incremental linkingProject Properties -> Configu转载 2015-08-12 18:09:51 · 709 阅读 · 0 评论 -
CPU的Cache
一. CacheCache一般来说,需要关心以下几个方面1)Cache hierarchyCache的层次,一般有L1, L2, L3 (L是level的意思)的cache。通常来说L1,L2是集成 在CPU里面的(可以称之为On-chip cache),而L3是放在CPU外面(可以称之为Off-chip cache)。当然这个不是绝对的,不同CPU的做法可能会不太一样。转载 2015-08-19 13:56:45 · 561 阅读 · 0 评论 -
关于空类大小问题的总结
1、为何空类的大小不是0呢?为了确保两个不同对象的地址不同,必须如此。类的实例化是在内存中分配一块地址,每个实例在内存中都有独一无二的二地址。同样,空类也会实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化后就有独一无二的地址了。所以,空类的sizeof为1,而不是0.2、请看下面的类:class A{ virtual void f(){} };class B:pub转载 2015-08-19 13:22:01 · 672 阅读 · 0 评论 -
C++缓冲区的知识
下面介绍缓冲区的知识。一、什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。二、为什么要引入缓冲区我们为什么要引入缓冲区呢?比如我们从磁盘里取信息,我们先把读出的数转载 2015-08-19 13:25:47 · 703 阅读 · 0 评论 -
C++之动态绑定和静态绑定
为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误,需要理解四个名词:1、对象的静态类型:对象在声明时采用的类型。是在编译期确定的。2、对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改。关于对象的静态类型和动态类型,看一个示例:[C++] view转载 2015-08-19 13:29:26 · 421 阅读 · 0 评论 -
动态库与主程序共享全局变量
曾经在一次写程序的时候,全局使用一个日志对象,所有的日志信息都由此日志对象写入文件。但是发现在动态链接库里,无法存取到该全局对象,后经查找资料。发现,动态链接库是否能存取主程序的全局变量,主程序是否能存取动态链接库里定义的全局变量都是可以通过链接指令改变此行为。主程序存取动态链接库里的全局变量例如动态库里定义全局变量int i, 在主程序里申明extern int i。 则,主程序转载 2015-09-16 10:29:21 · 1848 阅读 · 0 评论 -
Linux 下Hook一个共享库函数
有时程序员需要完成这类任务:假如你有一个二进制版的系统,例如现在流行的android,你需要为这个系统开发一个软件。这个软件牵涉到系统行为,因此需要对系统做修改。然而你并没有这个系统的所有源码( Nexus S的源码不一定与 android 官方版本一模一样),或者是你只有这个系统的头文件。当你需要修改部分系统行为的时候,你不可能用源码重新编译一个共享库来替换系统文件。此时,就需要利用 d转载 2015-09-23 14:14:03 · 910 阅读 · 0 评论 -
Linux共享对象之编译参数fPIC
Linux共享对象之编译参数fPIC 最近在看Linux编程的基础知识,打算对一些比较有趣的知识做一些汇总备忘,本文围绕fPIC展开,学习参考见文末。 在Linux系统中,动态链接文件称为动态共享对象(DSO,Dynamic Shared Objects),简称共享对象,一般是以.so为扩展名的文件。在Windows系统中,则称为动态链接库(Dynamic Linking Li转载 2016-04-01 17:00:41 · 369 阅读 · 0 评论 -
gcc编译参数-fPIC的一些问题
ppc_85xx-gcc -shared -fPIC liberr.c -o liberr.so-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code), 则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意 位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固转载 2016-04-05 11:26:51 · 308 阅读 · 0 评论 -
how to strip a shared library
https://www.technovelty.org/linux/stripping-shared-libraries.html how to strip a shared library?--strip-unneeded states that it removes all symbols that are not needed for relocation processin转载 2016-04-06 13:15:30 · 845 阅读 · 0 评论 -
用GDB调试程序
用GDB调试程序GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能:转载 2017-10-19 13:32:51 · 320 阅读 · 0 评论 -
C语言字节对齐问题综合
阅读目录3.1.3.1 数据类型转换3.1.3.2 处理器间数据通信3.1.3.3 排查对齐问题引言转自:http://www.cnblogs.com/clover-toeic/p/3853132.html 考虑下面的结构体定义:1 typedef struct{2 char c1;3 short s; 4 cha转载 2017-11-27 10:42:26 · 400 阅读 · 0 评论 -
GCC的ARM体系结构相关的编译选项解析
和ARM体系结构相关的选项这些是为ARM(Advanced RISC Machines)结构定义的“-m”开关:-mapcs-frame对所有函数都生成一个遵从ARM程序调用标准的堆栈帧,即使在正确执行代码无需严格这么做时。使用此开关时指定“-fomit-frame-pointer”将不产生叶函数的堆栈帧。缺省情况下是“-mno-apcs-frame”。-m转载 2018-01-16 17:00:49 · 939 阅读 · 0 评论 -
Linux下gdb 调试应用程序与动态库
在 Linux 可以用 gdb 来调试应用程序,当然前提是用 gcc 编译程序时要加上 -g 参数。我这篇文章里将讨论一下用 gdb 来调试动态链接库的问题。首先,假设我们准备这样的一个动态链接库:引用:库名称是: ggg 动态链接库文件名是: libggg.so 头文件是: get.h 提供这样两个函数调用接口: int get (); int set (int a);要转载 2015-08-10 14:05:08 · 721 阅读 · 0 评论 -
c++程序的内存布局
对任何一个普通C++程序来讲,它都会涉及到5种不同的数据段。常用的几个数据段种包含有“程序代码段”、“程序数据段”、“程序堆栈段”等。不错,这几种数据段都在其中,但除了以上几种数据段之外,进程还另外包含两种数据段。下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区。代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存种的镜像。代码段需要防转载 2015-08-24 12:41:44 · 374 阅读 · 0 评论 -
设计Qt风格的C++的应用程序接口
"Designing Qt-Style C++ APIs" by Matthias Ettrich http://doc.trolltech.com/qq/qq13-apis.html 翻译这篇文章的目的不是让人了解Qt,而是让人试着学习点C++编程的软技能。我从原文中得到的一些风格上的体会,也希望你能从中有所收获.(译者注)转载 2009-08-31 09:28:00 · 1086 阅读 · 0 评论 -
开源GUI库——QT
QT(windows版要付钱) -------http://www.trolltech.com/ -------http://www.qiliang.net/qt.html Qt是Trolltech公司的一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的很容易扩展,并且允许真正地组件原创 2009-08-28 15:38:00 · 837 阅读 · 0 评论 -
什么是vs 程序的manifest文件
什么是vs 程序的manifest文件manifest 是VS程序用来标明所依赖的side-by-side组建,如ATL, CRT等的清单。为什么要有manifest文件一台pc上,用一组建往往会有不止一个版本(c:/windows/winsxs或系统目录下),程序在加载的时候,不知加载哪个,于是manifest文件来指明。manifest在哪儿,如何创建。转载 2015-02-11 16:58:32 · 3630 阅读 · 0 评论 -
日志处理开源库,收集下来供日后使用
log4cpp (日志处理) -------http://sourceforge.net/projects/log4cpp/ -------http://log4cpp.hora-obscura.de/index.php/Main_Page Log4cpp 是 Log4J 的 C++ 移植版本,开放源代码并且完全免费。与 Log4J 能够跨平台一样,Log原创 2009-08-28 15:30:00 · 904 阅读 · 0 评论 -
const的用法总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。 Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。转载 2011-09-02 13:14:09 · 790 阅读 · 0 评论 -
vc6下编译使用x264库方法
X264更新的比较快,每天都有更新,但算法模块,基本结构是没有多大变化的。x264都是用C语言写的包括C99,但C99语法是在VC中是没法用的(当然有精力可以全部改成C89),生成的.a库是也是没法调用的,如何转化成可用.lib库就比较重要了。1 下载mingw+msys进行配置原创 2011-07-27 09:49:44 · 964 阅读 · 0 评论 -
精确获取时间差
inline unsigned __int64 GetCycleCount() { __asm _emit 0x0F __asm _emit 0x31 } 以后在需要计数器的场合,可以像使用普通的Win32 API一样,调用两次GetCycleCount函数,比较两个返回值的差,像这样: unsigned原创 2009-08-28 15:19:00 · 721 阅读 · 0 评论 -
vs2005编译dxsdk9环境配置
系统环境:XP Professional sp3Microsoft Visual C++ 2005 77626-009-0000007-41206DirectX 9.0(9.0b) SDK Update - (Summer 2003)第一步、编译T264.li转载 2011-08-24 16:06:59 · 970 阅读 · 0 评论 -
vc 内存泄漏检测方法
最近看了周星星 Blog 中的一篇文章:“VC++6.0中内存泄漏检测”,受益匪浅,便运行其例子代码想看看 Output 窗口中的输出结果,可惜怎么弄其输出都不是预期的东西,郁闷了半天,便到水坛里找到周星星,请求他指点一、二,然而未果。没有办法,最后我一头栽进 MSDN 库狂搜了一把,功夫不负有心人,我搜出很多有关这方面的资料,没过多久我便基本上就找到了答案...... 首先,检测内存泄转载 2015-06-17 11:24:57 · 624 阅读 · 0 评论 -
how to print the spend time of one function
using the timegettime()include the files : Mmsystem.h,Windows.h,加入静态库Winmm.lib.timeBeginPeriod(1);DWORD start = timeGetTime(); function();DWORD end = timeGetTime();timeEndPeriod(1);原创 2015-06-17 14:39:05 · 585 阅读 · 0 评论 -
Linux I/O多路复用技术-epoll
Linux I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。Linux 2.6内核中有提高网络I/O性能的新方法,即epoll 。1、为什么select落后 首先,在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数__FD_SETSIZE定义了每个FD_SET的句柄个数,在我用的2.6.15-25-386内核中,该转载 2015-08-10 14:14:17 · 700 阅读 · 0 评论 -
程序编译过程概述
编译过程主要分为4个过程 1) 编译预处理 预编译程序完成的工作,可以说成是对源程序的“替换”工作。经过这个过程,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。宏定义命令;例如#define条件编译指令;例如#ifdef头文件包含指令;例如#include特殊符号;例如__LINE__,__FILE__预处理模块;例如#pragma2) 编译、优化阶段:转载 2015-08-24 12:46:37 · 541 阅读 · 0 评论 -
C++对象内存布局
#类中的元素0. 成员变量 1. 成员函数 2. 静态成员变量 3. 静态成员函数 4. 虚函数 5. 纯虚函数#影响对象大小的因素0. 成员变量 1. 虚函数表指针(_vftptr) 2. 虚基类表指针(_vbtptr) 3. 内存对齐_vftptr、_vbtptr的初始化由对象的构造函数, 赋值运算符自动完成;对象生命转载 2015-08-24 13:17:25 · 447 阅读 · 0 评论 -
C++虚拟继承与普通继承的区别
前面一篇文章,说明了在C++ 虚继承对基类构造函数调用顺序的影响。经过仔细推敲,发现没有彻底说清楚虚继承与普通继承之间的关系。所以用下面的文字再说明一下。首先,重复一下虚拟继承与普通继承的区别有:假设derived 继承自base类,那么derived与base是一种“is a”的关系,即derived类是base类,而反之错误;假设derived 虚继承自base类,那么转载 2015-08-24 15:03:54 · 1708 阅读 · 0 评论 -
互联网公司最主流的技术选型
https://my.oschina.net/u/3985214/blog/3018099?tdsourcetag=s_pcqq_aiomsg路其实一直都在那里,只是我们看不到而已!以前我一直被公司和技术牵着走,并不是自己在选择技术,而是不自觉地被推到了这个位置上。想想有多少人对于自己将来要从事的职业和技术类型进行过深入思考和比较呢?当我跳出编码后,我开始思考和程序及程序员职业生涯相关的问...转载 2019-03-15 18:46:17 · 1338 阅读 · 0 评论