首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于测试程序运行时间的有关问题

2012-10-15 
关于测试程序运行时间的问题就我所知 GetTickCount()函数可以做到这个功能C/C++ code#include stdio.h#i

关于测试程序运行时间的问题
就我所知 GetTickCount()函数可以做到这个功能

C/C++ code
#include <stdio.h>#include <windows.h>int main(){       int time = GetTickCount();   \\插入要测试的语句   time = GetTickCount() - time; printf("计算用时:%d毫秒\n",  time);    return 0;}


你们还有其他方法吗?

第二个问题
int main()
{
  int b[2]={2,3},a=1;
  printf("%d",b[-1]);
  return 0;
}
输出结果为1 听别人说栈区数据在b地址之前 搞不清源程序文件是怎么编译的 那些数据是栈 那些是堆 什么的……
我要看哪些书籍补充这方面知识 这是不是跟编译原理这门课程有关呢?表示没有学这门课程 也没有学计算机组成原理 但下学期要学微机原理 是不是学了微机就不用学计算机组成原理呢?
麻烦各位了

[解决办法]
http://blog.csdn.net/asaasa66/article/details/6543929
[解决办法]
这个涉及到操作系统的底层知识以及编译原理,但是不是教科书上的编译器实现过程,而是程序地址结构以及链接原理,LZ可以看看Linux操作系统实现以及gcc manual之类的资料
[解决办法]
int b[2]={2,3},a=1;
这里的a以及b的空间是分配到程序运行时堆栈里面的,而堆栈空间是从高到低增长的,所以,你懂得。。。
[解决办法]
程序中全局地址空间是分配好的固定内存空间,而各函数中申明的变量的地址空间是在运行时堆栈中的,通过new ,malloc等函数开辟的空间是在堆中的。
[解决办法]
不可能输出1啊,如果你是多核处理器要么输出时0,要么就是15,31之类的
[解决办法]
使用电脑计时有时误差会很大,因为待测程序段的运行会影响电脑时钟。
将待测程序段循环足够多次,手动掐秒表计时可能更准确。
[解决办法]
b[-1]这种用法最好别用,如果的确需要指向前边的内存块,用指针,就像 arr[2]和2[arr]是一样的但是
你用后边那个总是不好
[解决办法]
第一个问题,楼主的计时方法恐怕不能满足一些需求,有时候要计算一个算法需要耗费的时间,这个时间很可能是不到一毫秒,这时候可能就要通过内嵌汇编来获得更精确的时标了。根据你的平台不同,当然有的也可以想办法用示波器去测量。

第二个问题,粗略地回答,全局变量在全局区,局部变量在栈区,局部静态变量也在全局区,如果你用了malloc等方法获取空间,那这段空间在堆区,可以简单认为堆区在全局区里。事实上从CPU角度来看,内存就是三个部分:程序段,栈,全局变量,只不过我们的操作系统灵活使用了全局变量区域

热点排行