内存拷贝程序的优化--利用系统的特性
来源:互联网 发布:心电图数据正常值 编辑:程序博客网 时间:2024/05/21 16:22
/*********************************************************************
* Author : Samson
* Date : 07/04/2012
* Test platform:
* GNU Linux version 2.6.29.4
* gcc version 4.4.0 20090506 (Red Hat 4.4.0-4) (GCC)
* *******************************************************************/
如下代码是没有优化的普通的性能的函数:
#include <stdlib.h>
#include <stdio.h>void *_memcpy(void *dest, const void *src, size_t n)
{
char i;
char *Pdest = (char *)dest, *Psrc = (char *)src;
for(i = 0; i < n; i++)
{
*Pdest = *Psrc;
Pdest += 1;
Psrc += 1;
}
return dest;
}
int main()
{
char strname[20] = "samson.wen";
char strcountry[20] = "China";
_memcpy(strcountry, strname, 8);
printf ("strcountry now value is %s\n", strcountry);
return 0;
}
编译运行后的结果是:
[root@UFO testascii]# ./a.out
strcountry now value is samson.w
那么面对以上的程序如何来做优化呢? 就利用一下系统的字长来做做优化吧, 我所使用的系统的字长为32位,也就是说一条指令的最大长度,那么就专门针对size_t n这个参数能够被4整除的数来修改成如下:
void *_memcpy(void *dest, const void *src, size_t n)
{
char i;
int num = n / sizeof(int);
int *Pdest = (int *)dest, *Psrc = (int *)src;
for(i = 0; i < num; i++)
{
*Pdest = *Psrc;
Pdest += 1;
Psrc += 1;
}
return dest;
}
其中, i改为char型,可以节省三个字节, 然后在每次内存复制的时候是按字长(一般系统的int型的长度即是一个字长)来进行复制,这会大大节约系统调用的调用次数,相应的时间也就用的更少了,也就达到了优化的效果,这种效果尤其是在嵌入式系统中的时候。
你还有更好的优化方法吗??? 若有,还请不吝赐教。
由于原来的程序存在缺陷,现将最新测试程序代码贴上:
void *_memcpychar(void *dest, const void *src, size_t n)
{
char i;
char *Pdest = (char *)dest, *Psrc = (char *)src;
for(i = 0; i < n; i++)
{
*Pdest = *Psrc;
Pdest += 1;
Psrc += 1;
}
return dest;
}
void *_memcpy(void *dest, const void *src, size_t n)
{
char i;
int num = n / sizeof(int);
int remainder = n - num*sizeof(int);
int *Pdest = (int *)dest, *Psrc = (int *)src;
for(i = 0; i < num; i++)
{
*Pdest = *Psrc;
Pdest += 1;
Psrc += 1;
}
_memcpychar(Pdest, Psrc, remainder);
return dest;
}
int main()
{
char strname[20] = "samson.wen";
char strcountry[20] = "";
_memcpy(strcountry, strname, 9);
printf ("strcountry now value is %s\n", strcountry);
return 0;
}
- 内存拷贝程序的优化--利用系统的特性
- 内存拷贝的优化方法
- 内存拷贝的优化方法
- 内存拷贝的优化方法
- 多余的内存利用Radmdis进行优化,加快系统
- [转]内存拷贝的优化方法
- 内存拷贝的优化方法(2)
- memcpy内存拷贝的改进与优化
- 内存拷贝的优化方法(草稿) [1]
- 内存拷贝的优化方法(草稿) [2]
- LabVIEW 程序的内存优化
- LabVIEW 程序的内存优化
- 利用cpu特性优化高性能程序
- 内存拷贝的优化方法(1)[转]
- memcpy内存拷贝的改进与优化 (转)
- 利用mmap()写一个拷贝文件的程序
- C# 的内存拷贝
- C# 的内存拷贝
- Richedit使用技巧
- 类似MSN信息发送框的制作(上)
- 自定义 CRichEditCtrl 控件
- 杭电 2067 小兔的棋盘
- 《软件世界:使用工具vim十例》系列讲座
- 内存拷贝程序的优化--利用系统的特性
- Python Fuzz Testing Tools
- API Tracing by ollydbg
- Step by Step of How TPTI-07-013 was Discovered
- 复杂xml 例子
- 回复图像分割的帖子
- 错误:'release' is unavailable: not available in automatic reference counting mode..(Xcode4.2.1+iOS5.0)
- 挽救一个习惯
- 布局,对象层级和内存管理