上一页 1 ··· 4 5 6 7 8

2008年11月27日

struct对象在内存中所占的空间大小(内存对齐)

摘要: 对于一个struct对象,其在内存中所占空间的大小往往不是所有成员的字节大小相加之和。运行下面代码看一下:#include<iostream> usingnamespacestd;//union structdemo{charc;shorts;inti;longl;floatf;doubled;longdoublelb;};intmain(){cout<<sizeof(demo)<<endl;return0;} 我在WindowsXp,vs2008下输出为32,为什么不是1+2+4+4+4+8+8呢?因为struct对象在存储时采用对齐原则,Windows默 阅读全文

posted @ 2008-11-27 22:11 NULL00 阅读(1141) 评论(0) 推荐(0) 编辑

以二进制方式输出数字在内存中的存储形式

摘要: 对于二进制表示的float类型的2.5,其在内存中的表示为01000000 00100000 00000000 00000000,如果我们想打印出它在内存中是如何表示的,那么我们可以用1进行移位,与每个比特进行与运算,还是看看代码吧: 对于输入参数,在visual studio下可以点击项目->属性->配置属性->调试->命令参数进行输入,在visual c++6.0可以点击工程->设置->调试->程序变量里输入。输入2.5打印看看,其结果与我们预期相同。#include <cstdlib> #include <iostream> 阅读全文

posted @ 2008-11-27 21:30 NULL00 阅读(1189) 评论(0) 推荐(0) 编辑

2008年11月18日

C++中“#”号妙用

摘要: 在写程序时,我们经常要输出,比如printf,cout,当你要输出表达式的值,并要在前面输出表达式的形式时,有时会有点麻烦!比如cout<<"a*b(c-d):"<<a*b(c-d)<<endl;有时像"a*b(c-d):"这样的表达式懒得写,或很多这样的表达式,写起来也浪费时间,我们可以用“#”来减少麻烦!貌似没说清楚,举个例子:#include <iostream> using namespace std;#define P(EX) cout<<#EX<<":" 阅读全文

posted @ 2008-11-18 12:41 NULL00 阅读(394) 评论(0) 推荐(0) 编辑

2008年11月16日

数学史上的三次数学危机

摘要: 数学史上一共爆发了三次数学危机: 第一次:无理数的发现。 在公元前5世纪,毕达哥拉斯学派认为自然界的任何数都可以由整数或整数之比表示,毕达哥拉斯学派的一项重大贡献是证明了勾股定理,但此学派的一个人发现了一些直角三角形的斜边不能表示成整数或整数之比(不可通约)的情形,如直角边长均为1的直角三角形就是如此。这一悖论直接触犯了毕氏学派的根本信条,导致了当时认识上的"危机",从而产生了第一次数学危机。 第二次:无穷小是零吗? 在18世纪,微积分蓬勃发展,广泛应用。但此时一位大哲理学家指出应用无穷小量究竟是不是零?无穷小及其分析是否合理?由此而引起了数学界甚至哲学界长达一个半世纪的争 阅读全文

posted @ 2008-11-16 00:51 NULL00 阅读(1647) 评论(0) 推荐(0) 编辑

2008年11月4日

UNIX不带缓存的IO函数

摘要: 大多数UNIX文件I/O操作只需用到5个函数:open、read、write、lseek、close,上述五个函数经常被称为不带缓存的I/O;不带缓存指的是每个read和write都调用内核中的一个系统调用;这些不带缓存的I/O函数不是ANSI C的组成部分,但是是POSIX.1和XPG3的组成部分。 下面我们来看看这些函数的应用,打开一个文件,读出1024字节,并输出内容。 1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <fcntl.h> 4 #include <unistd.h> 阅读全文

posted @ 2008-11-04 22:17 NULL00 阅读(534) 评论(0) 推荐(0) 编辑

2008年11月1日

为什么叫Windows 7 ?

摘要: 微软公司预计在2010年一月份(09年10月24日已经全球发布)推出Windows 7 ,但由于要先发行预测版,可能真正发布时间要迟些。为什么新的操作系统叫Windows 7呢?我们都知道有个Windows NT,但现在好像没谁平时还在说,都在说Xp或Vista。其实,我们现在用的Windows操作系统都是Windows NT系列。Window NT命名最后版本为NT4.0,此后从Windows 2000开始,虽然基于NT技术,但是命名方式改变了,但只要看Windows属性,就知道2000是NT5.0,XP是NT5.1,vista是NT6.0,server2008也是6.0,这就是未来的wi. 阅读全文

posted @ 2008-11-01 23:48 NULL00 阅读(430) 评论(0) 推荐(0) 编辑

C++用substr()函数消除前后空格

摘要: 最近做了个题目,遇到了要将字符串前后空格消除的细节问题。在Java中好像有一个字符串函数为trim()可以消除字符串后的空格。对于c++,查了一下,可以引用一个c++标准库Boost,可以轻松解决,但要下载,设置环境变量,因而没去弄。当然还可以用正则表达式进行匹配,但似乎都大材小用。不如就用substr()函数,而且string有find_last_not_of,find_first_not_of等等属性,已经够我们解决问题了。#include <iostream> #include <vector> #include <string> #include & 阅读全文

posted @ 2008-11-01 15:41 NULL00 阅读(5957) 评论(0) 推荐(0) 编辑

2008年10月26日

缓冲区溢出攻击试验(bufbomb.c)

摘要: 本文的实验来源于CSAPP 《Computer Systems A Programmer's Perspective》 (深入理解计算机系统)一书中第三章的一个实验,即习题3.38。 作者给出了一个含有缓冲区溢出的程序bufbomb.c,你需要做的,就是注入给缓冲区些特殊的数据,到底利用缓冲区的目的。在做这个题目之前,你当然要知道什么是帧栈结构(请参阅《深入理解计算机系统》第三章)或者之前的博文栈帧&溢出,了解%ebp和%esp的含义//bufbomb.c /* Bomb program that is solved using a buffer overflow attack 阅读全文

posted @ 2008-10-26 13:27 NULL00 阅读(7217) 评论(0) 推荐(0) 编辑

2008年10月19日

SSD6中Exercise1答案解析

摘要: #include <stdio.h> #include <stdlib.h> int prologue [] = { 0x5920453A, 0x54756F0A, 0x6F6F470A, 0x21643A6F, 0x6E617920, 0x680A6474, 0x6F697661, 0x20646E69, 0x63636363, 0x63636363, 0x72464663, 0x6F6D6F72, 0x63636363, 0x63636363, 0x72464663, 0x6F6D6F72, 0x2C336573, 0x7420346E, 0x20216F74... 阅读全文

posted @ 2008-10-19 15:27 NULL00 阅读(2892) 评论(0) 推荐(0) 编辑

2008年10月17日

栈帧&溢出

摘要: 栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构 从逻辑上讲,栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执行完后返回到哪里 … 。 实现上有硬件方式和软件方式(有些体系不支持硬件栈)缓冲区溢出攻击主要是利用栈帧的构成机制,利用疏忽的程序破坏栈帧从而使程序转移到攻击者期望或设定的代码上。 /*******************************************************************************************/详细分析过程调用的相关操作和汇编指令的作用。还是以代码来分析,非常简单的c程序,不过对于我们 阅读全文

posted @ 2008-10-17 13:56 NULL00 阅读(3422) 评论(3) 推荐(3) 编辑

2008年7月10日

约瑟夫问题链表解决方法(带有析构函数)

摘要: #include <iostream>usingnamespace std;class Joseph{protected: int number_of_people; int step;public: virtualvoid CreateOutput() =0; Joseph(){ number_of_people =0; step =0; } Joseph(int n,int m){ number_of_people = n; step = m; }};class JosephWithLink... 阅读全文

posted @ 2008-07-10 11:04 NULL00 阅读(853) 评论(0) 推荐(0) 编辑

2008年7月9日

n与n之间有n个数的问题

摘要: 【题目】 将六个数字1,1,2,2,3,3排成一排,使得两个1之间有一个数字,两个2之间有两个数字,两个3之间有3个数字。 此题的解决并不困难,我们可以采用枚举法:因为两个1之间有一个数字,这个数字只有2或3两种可能。如果两个1之间是2,可以排出三个数字:121,这时左右两侧只能是两个3,即排出了五个数字:31213,还剩下一个2,可以放在左侧或右侧,于是得到本题的两个答案:231213、312132;如果两个l之间是3,可以排出三个数字:131,这时就只能在左侧或右侧写2,即2131或1312,而另一个2就无处可放了,这说明两个1之间不能是3。所以本题的答案只能是:231213和312132 阅读全文

posted @ 2008-07-09 20:15 NULL00 阅读(1124) 评论(0) 推荐(0) 编辑

上一页 1 ··· 4 5 6 7 8

导航