易截截图软件、单文件、免安装、纯绿色、仅160KB

关于《0 bug C/C++商用工程之道》的一处bug

这两天有很多朋友已经买了书了,并且开始看,呵呵,我心里也很高兴。
嗯,要说江湖上藏龙卧虎呢,这不,这才几天时间,已经有朋友指出我书中的一处明显错误,这里我正式给大家说明一下,免得对各位读者有个不好的误导。
问题出在第26页的一个图以及其相关文字。这是第二章基础知识的第一节,其实就是关于内存的讲解,大家可以直接在样章中看到。
这论坛里面不好贴图,我就不直接画图给大家看了,简单说,我在书中论述:“32位操作系统下,每个进程空间有4G内存的连续地址可用,其中,高2G是系统使用,低2G是应用程序本身使用,另外,在低2G中,应用程序运行栈在下,即低位地址空间,从下向上生长,堆在上,从上向下分配,什么时候二者碰到一起,什么时候内存就满了,无法运行程序了”。
应该说,我这个说法是不对的,至少是不严谨,因为32位多任务操作系统多种多样,各家操作系统,各家编译器编译出来的运行结果,其实都不一样,我把话说得这么绝对,肯定有问题。这个呢,主要是我写书时不严谨,没有仔细查证资料,写随手了,导致了bug。这里给所有读者先道个歉,下次印刷时,我会和编辑修订这个问题。
我最近查了一下,32位多任务操作系统差别还是很大的,Windows主要是按照2G+2G的分配方式,即操作系统的代码占用2G地址编码,应用程序本身的代码,占用2G,Linux下,则是1G+3G的分配方式,操作系统只占1G地址空间,其它都给应用程序用。
因此,上文简单论述2G+2G,不准确,起码不符合所有操作系统的情况。
“堆在上,栈在下”的理解呢,我更多是来自16位时代的编译器习惯,32位以后情况发生了很大变化,我做了一下试验,VC和gcc均是“堆在下,向上分配,栈在上,向下生长”,和我书中说法是反的。因此必须修订。
我想,这段知识这么理解可能更好,就是应该更加抽象地论述这个问题,而不要说得这么精确。
“32位操作系统下,每个进程空间有4G内存的连续地址可用,其中,有一部分地址空间被系统使用,剩余部分是应用程序本身使用,另外,在应用程序空间中,至少分为程序运行栈和内存堆两个部分,这两部分内存根据应用程序自身运行情况,不断被申请使用和释放,如果二者发生干涉,则表示内存空间耗完,程序将无法运行。”
我在第二章基础知识的本意,是用简单的描述,使各位读者快速对32位操作系统有一个统揽,关于内存的描述,更多的是希望大家能理解上面这几个概念,堆,栈,系统区,应用 程序区等


相关文档:

mysql c 接口大全


MYSQL在 C API 中可用的函数:
mysql_affected_rows()
返回被最新的UPDATE, DELETE或INSERT查询影响的行数。
mysql_close()
关闭一个服务器连接。
mysql_connect()
连接一个MySQL服务器。该函数不推荐;使用mysql_real_connect()代替。
mysql_change_user()
改变在一个打开的连接上的用户和数据库。
mysql_ ......

C/C++编程GUI库比较

最强的GUI库当属Qt,毕竟是商业化的东西,功能最完整,什么都好,包括类似java代码风格,良好的框架设计,但有几点值的一提:
     1.它没有使用STL,而是自己实现了一套替代方案QTL;
     2.事件模型使用自创的signal/slot机制,所以需要moc.exe来预处理头文件;
  &nbs ......

objective c xml解析

    今天在CC上看到evangel在招人,上面写了一条数据解析,我想应该就是对XML的解析吧,暂且这样理解了,呵呵。下午搜索了一点东西自己弄了一个XML然后读读看看,现在仅仅是读出了一些东西,先保存代码,待后续更新!
    这个是我创建的xml文件,用于测试用的:
<?xml version="1.0" e ......

C/C++学习应该注意的几个细节


给我们上ASP.NET的老师在讲解C#的时候,总是要询问我们C#和C/C++间的不同之处,或者一些细节问题,但是平时不怎么注意,还真把我们给问到了!!
一.不经过中间变量怎样交换两个数据 int a=25;b=10;
解法: a=a+b;//35
        b=a-b;//25
      ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号