Peter.Y的技术博客

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2009年5月18日

摘要: 进程的执行需要进程空间,如果直接使用内存的空间,那么对于多任务的操作系统而言,维护进程所分配到的内存空间就比较困难,而且对于应用程序的编写者来说,也不够方便。引入虚存的概念,相当于在这两者之间加入一层,向上层应用屏蔽其复杂性。  虚存,全称虚拟内存,顾名思义,它对应的地址是虚拟的。其与物理的内存地址存在一个映射关系。物理内存的地址空间与实际内存大小对应,虚拟内存的地址空间在32位系统中,一般是2^32=4GB。有了虚拟内存机制,使得系统可以方便地支持内存管理、缓存以及内存保护机制。  先来看一下虚拟内存地址如何转换到最终的物理地址。  虚拟内存按页组织,页小大一般是4KB。所以,对于32位的虚 阅读全文
posted @ 2009-05-18 21:25 Peter.Y 阅读(360) 评论(0) 推荐(0) 编辑

2009年5月17日

摘要: CSAPP,全称Computer Systems: A Programmer's Perspective,中译名是深入理解计算机系统。这本书全面介绍了与程序员相关的计算机方方面面的内容,包括从基本的二进制,到计算机基本组成结构,到程序的编写、构成、执行的细节过程,到操作系统层面的一些基础理论,到网络编程和并发编程的基本概念,都有涉及。我的感觉是,这本书融合了本科阶段计算机组成原理、操作系统、编译原理等一些基础课程的内容,作为纲领式复习是一本不错的书籍。当然,这本书的内容在某些方面的深化,是在以往的课程中所没有的。    我是2008年12月购买的这本书,基本上是利用每天早晨1小时左右的时间来阅 阅读全文
posted @ 2009-05-17 03:46 Peter.Y 阅读(247) 评论(0) 推荐(0) 编辑

2009年3月25日

摘要: 这两天做个演示用例,用到了Matlab的画图功能,总结一下,备查。 1.画图 写个简单的.m文件是很Easy的,罗列下几个常用函数的使用方法 [示例1]:plot(X,Y,'b-','linewidth',2); X,Y表示向量,分别代表X轴和Y轴,'b-'表示线条颜色和样式,'linewidth',2这两个参数表示线条宽度是2 [示例2]:subplot(221)或者subplot(2,2,1)... 阅读全文
posted @ 2009-03-25 01:36 Peter.Y 阅读(2515) 评论(0) 推荐(0) 编辑

2009年3月2日

摘要: 前两天调代码的时候出了个运行时错,什么after block之类的,依据经验判断基本是new申请的空间发生错误,一般是越界造成的。这个问题本身没什么,倒让我对new的内部实现产生小小的好奇。好,试验一把!我这里只有VC的平台,就看看VC的实现吧!#define TYPE intvoid main(){TYPE *xp=new TYPE[10];xp[0] = 1;xp[1] = 2;xp[9] = 10;xp[12] = 12;xp[-3] = 11;delete []xp;}测试源码如上,这段代码在VC6.0上是运行无错的。(当然这么写还是很有问题的)DEBUG进new之后,发现new之后, 阅读全文
posted @ 2009-03-02 05:17 Peter.Y 阅读(341) 评论(0) 推荐(0) 编辑

2008年12月18日

摘要: 首先看一个转来的帖子 [转自:http://www.cnblogs.com/tuyile006/archive/2006/12/06/583647.html] IP数据包的头信息格式: +-------------------------------------------------+ | 版本 (4位) | +------------------------------------------... 阅读全文
posted @ 2008-12-18 19:32 Peter.Y 阅读(3236) 评论(0) 推荐(0) 编辑

2008年11月5日

摘要: MFC工程中,在连接时遇到如下错误nafxcwd.lib(afxmem.obj) :error LNK2005:"void * __cdecl operator new(unsigned int)"原因:MFC库和CRT库中都对new和delete有定义解决方法:强制库连接顺序,原则是MFC库优先于CRT相关的库进行连接,在link一栏中MFC库要填在前面。另外需在ignore lib一栏中补上,防止双重链接。参考资料:[http://support.microsoft.com/kb/148652/zh-cn] 阅读全文
posted @ 2008-11-05 06:41 Peter.Y 阅读(2914) 评论(0) 推荐(0) 编辑

摘要: 好文,转贴至此![原文链接:http://blog.csdn.net/soloist/archive/2005/09/30/493238.aspx]多Visual C++的使用者都碰到过LNK2005:symbol already defined和LNK1169:one or more multiply defined symbols found这样的链接错误,而且通常是在使用第三方库时遇到的。对于这个问题,有的朋友可能不知其然,而有的朋友可能知其然却不知其所以然,那么本文就试图为大家彻底解开关于它的种种疑惑。 大家都知道,从C/C++源程序到可执行文件要经历两个阶段:(1)编译器将源文件编 阅读全文
posted @ 2008-11-05 06:01 Peter.Y 阅读(239) 评论(0) 推荐(0) 编辑

2008年11月4日

摘要: [转自:http://www.cppblog.com/kevinlynx/archive/2008/04/24/47998.html]很早前就想写点总结将编程中遇到的各种错误刨根挖底地罗列出来。但是因为这些错误(VC中开调试器遇到的各种错误对话框)都是随机性的,真正想总结的时候又不想不起来有哪些错误。恰好最近运气比较背,各种错误都被我遇遍了,于是恰好有机会做个总结。这里所说的VC下的错误对话框时指在VC中开调试器运行程序时,IDE弹出的对话框。1.不是错误的错误:断言 .将断言视为错误其实有点可笑,但是因为有些同学甚至不知道这个,所以我稍微提一下。断言对话框大致上类似于:断言对话框是由asse 阅读全文
posted @ 2008-11-04 22:29 Peter.Y 阅读(309) 评论(0) 推荐(0) 编辑

2008年9月24日

摘要: (最近又回到Linux内核的怀抱中了。继续呵。)  首先说明Linux下的进程与线程比较相近。这么说的一个原因是它们都采用相同的数据结构来表示,即task_struct。区别在于一个有独立的用户空间,一个是共享的用户空间(如果完全没有用户空间则是内核线程,不需要)。  Linux的用户进程不能直接被创建出来,因为不存在这样的API。它只能从某个进程中复制出来,再通过EXEC这样的API来切换到实际想要运行的程序文件。  复制的API包括三种:fork、clone、vfork。  这三个API的内部实际都是调用一个内核内部函数do_fork,只是填写的参数不同而已。  vfork,其实就是for 阅读全文
posted @ 2008-09-24 22:09 Peter.Y 阅读(1036) 评论(0) 推荐(0) 编辑

2008年4月22日

摘要: 花了一晚上的时间才搞出这么点名堂,有点丢人。不过丢人就丢人吧,总归得把这仅有的成果记录下来。[环境]Vmware5.5 + Fedora8(Kernel:2.6.23.1-42.fc8-i586)===================================================[源代码hellomod.c]这里我仅使用了最简单的代码HelloWorld#includelinux/module.h#includelinux/kernel.h#includelinux/init.hMODULE_LICENSE("GPL")static int __init my_i 阅读全文
posted @ 2008-04-22 06:52 Peter.Y 阅读(1693) 评论(0) 推荐(0) 编辑