c++数组使用——配套测试记录

测试时经验总结:

1.数组长度超过1百万,不能存储在栈上,容易内存溢出。存为全局变量,存在堆上;

内存分为栈内存,堆内存,全局区,常量区,代码区。

栈内存存储的都是局部变量。由操作系统管理,程序一旦离开作用域,就会释放变量。栈的大小有限制,常见的是1M或2M大小,因此非常容易超出;

堆内存存储的是对象,凡是new建立的都在堆中,堆内的数据由用户释放。堆的大小基本无限制,但得注意释放内存。

全局区存储的是全局变量和静态变量。

2.内存直接操作,是比赋值快的,使用循环的方式赋值,速度显著的慢;

函数有memcpy(),memmove(),memset()

void *memcpy(void *dst,void const *src,size_t length)

void *memmove(void *dst,void const *src,size_t length),效率慢于memcpy,但可以处理拷贝的两端内存重叠的问题。

void *memset(void *a,int ch,size_t length),把从a开始的length个字节设置成字符值ch,可以初始化字符数组。

结果显示,操作内存也没快多少,快了1ms左右。

1.数组快速初始化方法

各种初始化为零的性能对比:

2.字符数组存储字符串

3.计算代码运行时间

方法1:包含头文件(不准确,容易出错)

#include <time.h>

#include <Windows.h>

//计时开始

clock_t start;

start = clock();

//计时结束

cout<<clock()-start<<" ms"<<endl;

方法2:自定义计时类

头文件:

//MyTimer.h//

#ifndef __MyTimer_H__

#define __MyTimer_H__

#include <windows.h>

class MyTimer

{

private:

int _freq;

LARGE_INTEGER _begin;

LARGE_INTEGER _end;

public:

long costTime; // 花费的时间(精确到微秒)

public:

MyTimer()

{

LARGE_INTEGER tmp;

QueryPerformanceFrequency(&tmp);//QueryPerformanceFrequency()作用:返回硬件支持的高精度计数器的频率。

_freq = tmp.QuadPart;

costTime = 0;

}

void Start() // 开始计时

{

QueryPerformanceCounter(&_begin);//获得初始值

}

void End() // 结束计时

{

QueryPerformanceCounter(&_end);//获得终止值

costTime = (long)((_end.QuadPart - _begin.QuadPart) * 1000000 / _freq);

}

void Reset() // 计时清0

{

costTime = 0;

}

};

#endif

使用方法:

MyTimer timer;

timer.Start();

Sleep(1000);

timer.End();

cout << "耗时为:" << timer.costTime << "us";

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();