最近看一些性能优化的东西,读了读intel对于C程序员的一些建议,大部分是群众喜闻乐见的老几条。其中关于循环条件在不同位置求值带来的性能开销以前还真不知道,贴出来给和我一样不知道的朋友分享一下。 低性能写法: [quote] int main() { int ret = 0; int i = 100; while ( i-- ) ret ++; } [/quote] 这是我常用的写法,把求值放到括号中,看上去简洁些。 gcc -S产生的汇编如下(部分) [quote] .L3: ...
初学C++,写了一段代码,本意想实现如下功能: 要求用户输入一个整数,打印其值,若用户输入错误的数据(比如输入字母),则打印一条出错信息,然后让用户重新输入。 代码如下: 现在的问题是: 若用户正确地输入整数,则没有任何问题;但是用户如果输入错误数据,比如输入字母'a',那么程序就会死循环打印出错信息“error,retry”,永远不会让用户进行第二次输入。而我的本意是只打印一次出错信息,然后等待用户第二次输入。 ...
大家有些人对关于缓冲区溢出攻击问题比较模糊。 我想当你知道什么是缓冲区,怎么样溢出,缓冲区溢出后做什么? 这些道理你懂了以后,就会知道缓冲区溢出是不是限制特定的语言或是 应用程序的BUG了. 像典型C语言的缓冲区溢出例子[1],大部分使用strcpy()函数[2],为什么? 因为这个函数有BUG,不检查越界问题[3]。 所以,导缓冲区溢出攻击.针对这个例子,什么是缓冲区?缓冲区是调用这个 函数时候的堆栈(为临时变量分配空间)空间.怎么样溢出?由...
[code]
/*
*program.c
*/
#include
有下面程序: [code]int main() { char *s1="12"; char *s2="34"; FILE* fp; fp = fopen("/tmp/fwrite","w"); fwrite(s1,sizeof(s1),1,fp); //fflush(0); setbuf(fp,NULL); fclose(fp); fp = fopen("/tmp/fwrite","a+"); fwrite(s2,sizeof(s2),1,fp); fclose(fp); return 0; }[/code] cat /tmp/fwrite 为12334w 如果把setbuf换成setlinebuf,问题照旧,用fflush(0),问题照旧,如果在s1和s2后面加\n,正常,这到底是什...