刚刚AC了一题,需要将数组部分初始化为零,为了简单我就用memset将整个数组置零了,在我印象中memset函数的速度是快得惊人的,没想到居然超时了,让我不得不重新审视memset的效率和我那想当然的愚昧。
初始化部分如下:#include<stdio.h> #define MAX 1000 int ndata[ MAX ][ MAX ]; int main() { char a[MAX]; char b[MAX]; int i , j; int nTemp = 10000; i = nTemp, j = nTemp; double BegTime , EndTime; BegTime = clock(); while( i-- ) { memset( ndata, 0, sizeof(int) * MAX * MAX ); } EndTime = clock(); printf(" %g s \n ", (EndTime - BegTime ) / 1000/1000); BegTime = clock(); while( nTemp-- ) { for ( i = 0; i <= MAX; i++) ndata[i][0] = 0; for ( j = 0; j <= MAX; j++) ndata[0][j] = 0; } EndTime = clock(); printf(" %g s \n ", (EndTime - BegTime ) / 1000/1000); return 0; }
3.75s
0.11s
速度相差了三十倍,难怪会超时,为了知道memset的效率,又试了下如下案例
#include<stdio.h> #define MAX 1000 int ndata[ MAX ][ MAX ]; int main() { char a[MAX]; char b[MAX]; int i , j; int nTemp = 10000; i = nTemp, j = nTemp; double BegTime , EndTime; BegTime = clock(); while( i-- ) { memset( ndata, 0, sizeof(int) * MAX * MAX ); } EndTime = clock(); printf(" %g s \n ", (EndTime - BegTime ) / 1000/1000); BegTime = clock(); while( nTemp-- ) { /* for ( i = 0; i <= MAX; i++) ndata[i][0] = 0; for ( j = 0; j <= MAX; j++) ndata[0][j] = 0; */ for ( i = 0; i < MAX; i++) for ( j = 0; j < MAX; j++) ndata[i][j] = 0; } EndTime = clock(); printf(" %g s \n ", (EndTime - BegTime ) / 1000/1000); return 0; } 上述代码就为了初始化一个大数组,执行结果如下:
3.58s
24.8s
测试结果表明:memset比普通的初始化快7倍,所以应该多用memset来完成初始化工作。但,最根本还是应该减少计算机的计算量。
您还没有登录,请您登录后再发表评论
在实际应用中,应谨慎使用这样的优化,并且进行充分的性能测试,以确保优化确实带来了预期的性能提升,并且不会对其他部分的代码产生负面影响。同时,考虑到兼容性和调试的便利性,通常会在必要时才采用这种底层级别...
另一方面,"ciu.txt"可能是一个持续集成/单元测试的配置文件,或者包含了测试用例和结果,用于验证`memset-sh4.c`中的实现是否正确且高效。这样的测试对于确保优化后的`memset`在各种场景下都能正常工作至关重要,...
总之,通过这个DDR内存测试用例,开发者可以对STM32MP1系列的内存管理能力进行全面评估,确保其在实际应用中的可靠性和效率,这对于开发高质量、高性能的嵌入式系统至关重要。同时,这也体现了软件工程中的一个重要...
* 使用时间函数 clock() 和 CLOCKS_PER_SEC 常数测试程序的效率 八、常见问题解决方法 * 开灯问题:使用 if 语句控制数组的元素 * 蛇形填数:使用四个循环走控制数组的元素 * 最长回文:使用 fgets 函数读取字符串...
文档中提到的压力测试可能是为了评估读取大量数据的速度和效率。在这种情况下,可能会关注CPU使用率、内存占用、I/O性能等指标。可以使用各种性能分析工具,如gprof、valgrind、strace等,对代码进行分析优化。 7....
在处理字符串赋值时,方法A使用了`memset`和`strcpy`两个函数,而方法B则直接使用了常量字符串,减少了函数调用的开销。当系统对实时性要求较高,且内存资源相对充足时,采用这种方法可以提高程序执行效率。此外,宏...
C语言函数总结 C语言函数是C语言中的一种基本组成部分,它们提供了许多有用的功能,可以帮助开发者快速实现各种任务。...通过对C语言函数的总结,我们可以更好地理解和应用这些函数,提高开发效率和质量。
- 题目中提到可以利用标准输入重定向(如 `freopen` 函数)来快速测试代码的正确性,这对于提高调试效率非常有帮助,尤其是在处理大量输入数据时。 4. **编程基础**: - 熟悉 C 语言的常用函数,如 `scanf` 和 `...
Keil C51 库函数提供了 9 个本征库函数,这些函数可以直接将固定的代码插入当前行,而不是用 ACALL 和 LCALL 语句来实现,从而提高函数访问的效率。这些本征库函数包括: * `_crol_` 和 `_cror_`:将 char 型变量...
memset(a,0,sizeof(a)); int i=0,j; char t; cin.getline(a,50,'\n'); for(i=0,j=strlen(a)-1;i(a)/2;i++,j--) { t=a[i]; a[i]=a[j]; a[j]=t; } cout; } //第二种 string str; cin>>str; str.replace; ...
在C语言中,系统函数是...在进行软件开发时,了解并熟练使用这些函数能够提高代码的效率和可读性。在不同的编译环境中,某些函数可能有不同的实现或支持,因此在跨平台编程时需要查阅相应编译器的文档来确保兼容性。
通过分析这些测试用例,我们可以学习如何有效地利用内联函数来提升代码执行效率,以及如何正确使用C语言的内置函数来执行各种任务。 在实际编程中,合理使用内联函数和内置函数可以显著提高程序的运行速度,尤其是...
九个本征库函数包括_crol_和_cror_用于循环左右移位,_iorl_和_irol_针对int型变量的移位,_lrol_和_lror_适用于long型变量的移位,_nop_插入空操作指令,_testbit_则可以测试并跳转位变量,最后是.chkfloat_用于...
C51 提供的本征函数是指编译时直接将固定的代码插入当前行,而不是用 ACALL 和 LCALL 语句来实现,这样就大大提高了函数访问的效率。本征库函数只有 9 个,但都非常有用,包括: * `_crol_` 和 `_cror_`:将 char ...
5. 使用计时器可以测试程序的效率,可以使用#include和printf("%.2lf",(double)clock()/CLOCKS_PER_SEC)。 三、文件操作 1. 输入输出重定向:可以使用#define LOCAL和freopen函数来重定向输入和输出。 2. 文件...
在实际编程中,为了测试代码的正确性,通常需要编写一些测试用例,包括边界情况和一些复杂的输入,例如桃子数量很大或为0的情况。 总的来说,“猴子吃桃”问题是一个很好的练习动态规划和递归思维的实例,通过解决...
使用计时器可以测试程序的效率。例如,#include<time.h> printf("%.2lf", (double)clock() / CLOCKS_PER_SEC); 注意的是,将其放入程序时,测试时会把键盘输入的时间一块算上,而如果不计可以使用命令行测试。 八、...
Magic Packet 的构造过程中,首先 memset 将前 6 个字节设置为 FF,接着将 MAC 地址复制到 Magic Packet 中 16 次。 在发送 Magic Packet 前,需要启动 WSA(Windows Socket Architecture),并创建一个 UDP socket...
`mem*`系列函数如`memcpy`、`memmove`和`memset`处理内存块的复制、移动和填充。 6. 数学计算函数: 这些函数提供了基本的数学运算,如`abs`计算绝对值,`acos`、`asin`、`atan`等提供三角函数计算。`ceil`返回...
在实际编程练习中,我们可以根据需要调整代码,例如添加输入功能,让用户选择起始位置,或者优化代码以提高效率,如使用迭代而不是递归,以及使用数据结构如队列来存储待访问的棋盘位置。 马踏棋盘问题不仅有助于...
相关推荐
在实际应用中,应谨慎使用这样的优化,并且进行充分的性能测试,以确保优化确实带来了预期的性能提升,并且不会对其他部分的代码产生负面影响。同时,考虑到兼容性和调试的便利性,通常会在必要时才采用这种底层级别...
另一方面,"ciu.txt"可能是一个持续集成/单元测试的配置文件,或者包含了测试用例和结果,用于验证`memset-sh4.c`中的实现是否正确且高效。这样的测试对于确保优化后的`memset`在各种场景下都能正常工作至关重要,...
总之,通过这个DDR内存测试用例,开发者可以对STM32MP1系列的内存管理能力进行全面评估,确保其在实际应用中的可靠性和效率,这对于开发高质量、高性能的嵌入式系统至关重要。同时,这也体现了软件工程中的一个重要...
* 使用时间函数 clock() 和 CLOCKS_PER_SEC 常数测试程序的效率 八、常见问题解决方法 * 开灯问题:使用 if 语句控制数组的元素 * 蛇形填数:使用四个循环走控制数组的元素 * 最长回文:使用 fgets 函数读取字符串...
文档中提到的压力测试可能是为了评估读取大量数据的速度和效率。在这种情况下,可能会关注CPU使用率、内存占用、I/O性能等指标。可以使用各种性能分析工具,如gprof、valgrind、strace等,对代码进行分析优化。 7....
在处理字符串赋值时,方法A使用了`memset`和`strcpy`两个函数,而方法B则直接使用了常量字符串,减少了函数调用的开销。当系统对实时性要求较高,且内存资源相对充足时,采用这种方法可以提高程序执行效率。此外,宏...
C语言函数总结 C语言函数是C语言中的一种基本组成部分,它们提供了许多有用的功能,可以帮助开发者快速实现各种任务。...通过对C语言函数的总结,我们可以更好地理解和应用这些函数,提高开发效率和质量。
- 题目中提到可以利用标准输入重定向(如 `freopen` 函数)来快速测试代码的正确性,这对于提高调试效率非常有帮助,尤其是在处理大量输入数据时。 4. **编程基础**: - 熟悉 C 语言的常用函数,如 `scanf` 和 `...
Keil C51 库函数提供了 9 个本征库函数,这些函数可以直接将固定的代码插入当前行,而不是用 ACALL 和 LCALL 语句来实现,从而提高函数访问的效率。这些本征库函数包括: * `_crol_` 和 `_cror_`:将 char 型变量...
memset(a,0,sizeof(a)); int i=0,j; char t; cin.getline(a,50,'\n'); for(i=0,j=strlen(a)-1;i(a)/2;i++,j--) { t=a[i]; a[i]=a[j]; a[j]=t; } cout; } //第二种 string str; cin>>str; str.replace; ...
在C语言中,系统函数是...在进行软件开发时,了解并熟练使用这些函数能够提高代码的效率和可读性。在不同的编译环境中,某些函数可能有不同的实现或支持,因此在跨平台编程时需要查阅相应编译器的文档来确保兼容性。
通过分析这些测试用例,我们可以学习如何有效地利用内联函数来提升代码执行效率,以及如何正确使用C语言的内置函数来执行各种任务。 在实际编程中,合理使用内联函数和内置函数可以显著提高程序的运行速度,尤其是...
九个本征库函数包括_crol_和_cror_用于循环左右移位,_iorl_和_irol_针对int型变量的移位,_lrol_和_lror_适用于long型变量的移位,_nop_插入空操作指令,_testbit_则可以测试并跳转位变量,最后是.chkfloat_用于...
C51 提供的本征函数是指编译时直接将固定的代码插入当前行,而不是用 ACALL 和 LCALL 语句来实现,这样就大大提高了函数访问的效率。本征库函数只有 9 个,但都非常有用,包括: * `_crol_` 和 `_cror_`:将 char ...
5. 使用计时器可以测试程序的效率,可以使用#include和printf("%.2lf",(double)clock()/CLOCKS_PER_SEC)。 三、文件操作 1. 输入输出重定向:可以使用#define LOCAL和freopen函数来重定向输入和输出。 2. 文件...
在实际编程中,为了测试代码的正确性,通常需要编写一些测试用例,包括边界情况和一些复杂的输入,例如桃子数量很大或为0的情况。 总的来说,“猴子吃桃”问题是一个很好的练习动态规划和递归思维的实例,通过解决...
使用计时器可以测试程序的效率。例如,#include<time.h> printf("%.2lf", (double)clock() / CLOCKS_PER_SEC); 注意的是,将其放入程序时,测试时会把键盘输入的时间一块算上,而如果不计可以使用命令行测试。 八、...
Magic Packet 的构造过程中,首先 memset 将前 6 个字节设置为 FF,接着将 MAC 地址复制到 Magic Packet 中 16 次。 在发送 Magic Packet 前,需要启动 WSA(Windows Socket Architecture),并创建一个 UDP socket...
`mem*`系列函数如`memcpy`、`memmove`和`memset`处理内存块的复制、移动和填充。 6. 数学计算函数: 这些函数提供了基本的数学运算,如`abs`计算绝对值,`acos`、`asin`、`atan`等提供三角函数计算。`ceil`返回...
在实际编程练习中,我们可以根据需要调整代码,例如添加输入功能,让用户选择起始位置,或者优化代码以提高效率,如使用迭代而不是递归,以及使用数据结构如队列来存储待访问的棋盘位置。 马踏棋盘问题不仅有助于...