2009年5月15日

一个找出素数的程序

找出0到cap范围内的素数:
void primes(int cap)
{
int i, j, composite;
for(i = 2; i < cap; ++i) {
composite = 0;
for(j = 2; j * j < i; ++j) {
composite += !(i % j);
}
if(!composite){
printf("%d\t", i);
}
}
}
int main()
{
primes(100);
}

posted @ 2009-05-31 12:03 蒋耘 阅读(372) | 评论 (1)编辑 收藏

struts2中获得request response session对象(转)

     摘要: 在struts2中有两种方式可以得到这些对象


1、非IoC方式


要获得上述对象,关键Struts 2中com.opensymphony.xwork2.ActionContext类。我们可以通过它的静态方法getContext()获取当前Action的上下文对象。有了这个对象我们想获得其他几个对象就好办了
ActionContext ctx = ActionContext.getContext();
Map session = ctx.getSession();

细心的朋友可以发现这里的session是个map对象在Struts2中底层的session都被封装成了Map类型我们可以直接操作这个map 进行对session的写入和读取操作而不用去直接操作HttpSession对象
  阅读全文

posted @ 2009-05-20 00:26 蒋耘 阅读(764) | 评论 (0)编辑 收藏

sizeof:对齐问题

因为对齐问题使结构体的sizeof变得比较复杂,看下面的例子:(默认对齐方式下)

struct s1
{
char a;
double b;
int c;
char d; 
};

struct s2
{
char a;
char b;
int c;
double d;
};

cout<<sizeof(s1)<<endl; // 24
cout<<sizeof(s2)<<endl; // 16

  
同样是两个char类型,一个int类型,一个double类型,但是因为对界问题,导致他们的大小不同。计算结构体大小可以采用元素摆放法,我举例子说明一下:首先,CPU判断结构体的对界,根据上一节的结论,s1s2的对界都取最大的元素类型,也就是double类型的对界8。然后开始摆放每个元素。
  
对于s1,首先把a放到8的对界,假定是0,此时下一个空闲的地址是1,但是下一个元素ddouble类型,要放到8的对界上,离1最接近的地址是8了,所以d被放在了8,此时下一个空闲地址变成了16,下一个元素c的对界是416可以满足,所以c放在了16,此时下一个空闲地址变成了20,下一个元素d需要对界1,也正好落在对界上,所以d放在了20,结构体在地址21处结束。由于s1的大小需要是8的倍数,所以21-23的空间被保留,s1的大小变成了24
  
对于s2,首先把a放到8的对界,假定是0,此时下一个空闲地址是1,下一个元素的对界也是1,所以b摆放在1,下一个空闲地址变成了2;下一个元素c的对界是4,所以取离2最近的地址4摆放c,下一个空闲地址变成了8,下一个元素d的对界是8,所以d摆放在8,所有元素摆放完毕,结构体在15处结束,占用总空间为16,正好是8的倍数。

  
这里有个陷阱,对于结构体中的结构体成员,不要认为它的对齐方式就是他的大小,看下面的例子:

struct s1
{
char a[8];
};

struct s2
{
double d;
};

struct s3
{
s1 s;
char a;
};

struct s4
{
s2 s;
char a; 
};

cout<<sizeof(s1)<<endl; // 8
cout<<sizeof(s2)<<endl; // 8
cout<<sizeof(s3)<<endl; // 9
cout<<sizeof(s4)<<endl; // 16;

  s1
s2大小虽然都是8,但是s1的对齐方式是1s28double),所以在s3s4中才有这样的差异。

  
所以,在自己定义结构体的时候,如果空间紧张的话,最好考虑对齐因素来排列结构体里的元素。

posted @ 2009-05-16 18:11 蒋耘 阅读(656) | 评论 (0)编辑 收藏

同步/异步与阻塞/非阻塞的区别(转)

     摘要: 首先来解释同步和异步的概念,这两个概念与消息的通知机制有关.

举个例子,比如我去银行办理业务,可能选择排队等候,也可能取一个小纸条上面有我的号码,等到排到我这一号时由柜台的人通知我轮到我去办理业务了.
前者(排队等候)就是同步等待消息,而后者(等待别人通知)就是异步等待消息.在异步消息处理中,等待消息者(在这个例子中就是等待办理业务的人)往往注册一个回调机制,在所等待的事件被触发时由触发机制(在这里是柜台的人)通过某种机制(在这里是写在小纸条上的号码)找到等待该事件的人.
而在实际的程序中,同步消息处理就好比简单的read/write操作,它们需要等待这两个操作成功才能返回;而异步处理机制就是类似于select/poll之类的多路复用IO操作,当所关注的消息被触发时,由消息触发机制通知触发对消息的处理.  阅读全文

posted @ 2009-05-16 18:07 蒋耘 阅读(6261) | 评论 (2)编辑 收藏

关于VC2008下提示找不到MSVCP90D.dll的解决办法

Same problem MSCVP90D.dill not found,

went to "Project | Game Properties | Configuration Properties | C/C++ | Code Generation | Runtime Library"

and set Multi-threaded Debug (/MTd)

did build generated error messages...

then reset

"Project | Game Properties | Configuration Properties | C/C++ | Code Generation | Runtime Library"

to

Multi-threaded Debug DLL (/MDd)

posted @ 2009-05-15 22:21 蒋耘 阅读(1085) | 评论 (0)编辑 收藏

<2009年5月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(2)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜