本文介绍了清除一个小整数数组:循环memset的对比的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有两种方法可以零出一个整数/浮点数组:

  memset的(数组,0,sizeof的(INT)* ARRAYSIZE);

 的for(int i = 0; I< ARRAYSIZE ++ I)
    数组[我] = 0;

显然,memset的是大快 ARRAYSIZE 。但是,在什么点是memset的开销实际上比for循环开销更大?例如,对于大小为5的阵列 - 这将是最好的?第一,第二,或者甚至未轧版本:

 数组[0] = 0;
阵列[1] = 0;
阵列[2] = 0;
阵列[3] = 0;
阵列[4] = 0;


解决方案

在所有的可能性,memset的()将被编译器内联(大多数编译器把它当作一个'内在',这基本上意味着它内联,也许除了在最低优化或除非明确禁用)。

例如,这里有从GCC 4.3 一些发行说明:

It might be possible for the compiler to do something similar with the alternative examples you gave, but I'd bet it's less likely to.

And it's grep-able and more immediately obvious at a glance what the intent is to boot (not that the loop is particularly difficult to grok either).

这篇关于清除一个小整数数组:循环memset的对比的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!