刚刚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来完成初始化工作。但,最根本还是应该减少计算机的计算量。
您还没有登录,请您登录后再发表评论
在C语言中,`memset()`函数是用于将内存块中的特定范围填充为...总之,虽然这个自定义实现提供了一种纯C语言的方法来实现`memset()`功能,但在实际应用中,使用标准库函数通常更为推荐,因为它们已经过广泛测试和优化。
在实际应用中,应谨慎使用这样的优化,并且进行充分的性能测试,以确保优化确实带来了预期的性能提升,并且不会对其他部分的代码产生负面影响。同时,考虑到兼容性和调试的便利性,通常会在必要时才采用这种底层级别...
另一方面,"ciu.txt"可能是一个持续集成/单元测试的配置文件,或者包含了测试用例和结果,用于验证`memset-sh4.c`中的实现是否正确且高效。这样的测试对于确保优化后的`memset`在各种场景下都能正常工作至关重要,...
总之,通过这个DDR内存测试用例,开发者可以对STM32MP1系列的内存管理能力进行全面评估,确保其在实际应用中的可靠性和效率,这对于开发高质量、高性能的嵌入式系统至关重要。同时,这也体现了软件工程中的一个重要...
* 使用时间函数 clock() 和 CLOCKS_PER_SEC 常数测试程序的效率 八、常见问题解决方法 * 开灯问题:使用 if 语句控制数组的元素 * 蛇形填数:使用四个循环走控制数组的元素 * 最长回文:使用 fgets 函数读取字符串...
文档中提到的压力测试可能是为了评估读取大量数据的速度和效率。在这种情况下,可能会关注CPU使用率、内存占用、I/O性能等指标。可以使用各种性能分析工具,如gprof、valgrind、strace等,对代码进行分析优化。 7....
根据给定的信息,本文将详细解释与ACM竞赛中常用的一些编程模板相关的知识点,包括素数筛选、随机素数测试及大数素数测试等。...这些模板不仅可以提高编程效率,还能帮助参赛者更好地理解和掌握相关算法。
C语言函数总结 C语言函数是C语言中的一种基本组成部分,它们提供了许多有用的功能,可以帮助开发者快速实现各种任务。...通过对C语言函数的总结,我们可以更好地理解和应用这些函数,提高开发效率和质量。
- **暴力memcpy、memset**:在处理树的结构时,直接使用内存复制函数如memcpy和memset可能会忽略树的内在结构,导致错误的匹配。这些函数适用于简单的数据复制,但对于复杂的数据结构,如树,需要更精确的操作。 3...
`memset`函数用于初始化全局数组`g_flag`,确保所有元素都设为0。此外,注意到在`stringFilter`函数中,`pOutputStr[i] = '\0'`用来添加字符串结束符,这是C/C++中表示字符串结束的标准方式。 6. 测试:题目提供了...
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语言的内置函数来执行各种任务。 在实际编程中,合理使用内联函数和内置函数可以显著提高程序的运行速度,尤其是...
对于这些新芯片的移植和支持,可以借鉴本次8328移植的经验,进一步优化移植流程,提高移植效率。此外,随着物联网技术的不断进步,交换芯片的应用场景也将更加广泛,对交换芯片的功能需求也将更加多样化。因此,持续...
贪心算法在解决特定类型的问题时具有显著的效率和实用性。特别是在处理诸如“Poj 2376”这样的问题时,贪心策略能够帮助我们找到最优解或近似最优解。这个问题要求我们找出最少数量的牛来清洁一段长度为`len`的地板...
九个本征库函数包括_crol_和_cror_用于循环左右移位,_iorl_和_irol_针对int型变量的移位,_lrol_和_lror_适用于long型变量的移位,_nop_插入空操作指令,_testbit_则可以测试并跳转位变量,最后是.chkfloat_用于...
C51 提供的本征函数是指编译时直接将固定的代码插入当前行,而不是用 ACALL 和 LCALL 语句来实现,这样就大大提高了函数访问的效率。本征库函数只有 9 个,但都非常有用,包括: * `_crol_` 和 `_cror_`:将 char ...
- **填写服务器地址**:使用`memset`函数将 Internet 套接字地址结构清零后,填充服务器的 IP 地址和端口号。为了简化程序,作者假设用户通过命令行输入服务器的 IP 地址(点分十进制形式),并通过宏定义来设置端口...
5. `memset`:用于将指定的内存区域中的所有字节设置为特定的值。这个函数在初始化数据结构时尤其有用,例如将结构体的每个成员都设置为0。 6. `swab`:主要用在低级数据处理中,它将相邻的字节对进行交换,并将...
相关推荐
在C语言中,`memset()`函数是用于将内存块中的特定范围填充为...总之,虽然这个自定义实现提供了一种纯C语言的方法来实现`memset()`功能,但在实际应用中,使用标准库函数通常更为推荐,因为它们已经过广泛测试和优化。
在实际应用中,应谨慎使用这样的优化,并且进行充分的性能测试,以确保优化确实带来了预期的性能提升,并且不会对其他部分的代码产生负面影响。同时,考虑到兼容性和调试的便利性,通常会在必要时才采用这种底层级别...
另一方面,"ciu.txt"可能是一个持续集成/单元测试的配置文件,或者包含了测试用例和结果,用于验证`memset-sh4.c`中的实现是否正确且高效。这样的测试对于确保优化后的`memset`在各种场景下都能正常工作至关重要,...
总之,通过这个DDR内存测试用例,开发者可以对STM32MP1系列的内存管理能力进行全面评估,确保其在实际应用中的可靠性和效率,这对于开发高质量、高性能的嵌入式系统至关重要。同时,这也体现了软件工程中的一个重要...
* 使用时间函数 clock() 和 CLOCKS_PER_SEC 常数测试程序的效率 八、常见问题解决方法 * 开灯问题:使用 if 语句控制数组的元素 * 蛇形填数:使用四个循环走控制数组的元素 * 最长回文:使用 fgets 函数读取字符串...
文档中提到的压力测试可能是为了评估读取大量数据的速度和效率。在这种情况下,可能会关注CPU使用率、内存占用、I/O性能等指标。可以使用各种性能分析工具,如gprof、valgrind、strace等,对代码进行分析优化。 7....
根据给定的信息,本文将详细解释与ACM竞赛中常用的一些编程模板相关的知识点,包括素数筛选、随机素数测试及大数素数测试等。...这些模板不仅可以提高编程效率,还能帮助参赛者更好地理解和掌握相关算法。
C语言函数总结 C语言函数是C语言中的一种基本组成部分,它们提供了许多有用的功能,可以帮助开发者快速实现各种任务。...通过对C语言函数的总结,我们可以更好地理解和应用这些函数,提高开发效率和质量。
- **暴力memcpy、memset**:在处理树的结构时,直接使用内存复制函数如memcpy和memset可能会忽略树的内在结构,导致错误的匹配。这些函数适用于简单的数据复制,但对于复杂的数据结构,如树,需要更精确的操作。 3...
`memset`函数用于初始化全局数组`g_flag`,确保所有元素都设为0。此外,注意到在`stringFilter`函数中,`pOutputStr[i] = '\0'`用来添加字符串结束符,这是C/C++中表示字符串结束的标准方式。 6. 测试:题目提供了...
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语言的内置函数来执行各种任务。 在实际编程中,合理使用内联函数和内置函数可以显著提高程序的运行速度,尤其是...
对于这些新芯片的移植和支持,可以借鉴本次8328移植的经验,进一步优化移植流程,提高移植效率。此外,随着物联网技术的不断进步,交换芯片的应用场景也将更加广泛,对交换芯片的功能需求也将更加多样化。因此,持续...
贪心算法在解决特定类型的问题时具有显著的效率和实用性。特别是在处理诸如“Poj 2376”这样的问题时,贪心策略能够帮助我们找到最优解或近似最优解。这个问题要求我们找出最少数量的牛来清洁一段长度为`len`的地板...
九个本征库函数包括_crol_和_cror_用于循环左右移位,_iorl_和_irol_针对int型变量的移位,_lrol_和_lror_适用于long型变量的移位,_nop_插入空操作指令,_testbit_则可以测试并跳转位变量,最后是.chkfloat_用于...
C51 提供的本征函数是指编译时直接将固定的代码插入当前行,而不是用 ACALL 和 LCALL 语句来实现,这样就大大提高了函数访问的效率。本征库函数只有 9 个,但都非常有用,包括: * `_crol_` 和 `_cror_`:将 char ...
- **填写服务器地址**:使用`memset`函数将 Internet 套接字地址结构清零后,填充服务器的 IP 地址和端口号。为了简化程序,作者假设用户通过命令行输入服务器的 IP 地址(点分十进制形式),并通过宏定义来设置端口...
5. `memset`:用于将指定的内存区域中的所有字节设置为特定的值。这个函数在初始化数据结构时尤其有用,例如将结构体的每个成员都设置为0。 6. `swab`:主要用在低级数据处理中,它将相邻的字节对进行交换,并将...