【发布时间】:2012-01-21 15:36:57
【问题描述】:
我很好奇在类似于以下情况的情况下使用 memset() 在效率方面是否有任何优势。
鉴于以下缓冲区声明...
struct More_Buffer_Info
{
unsigned char a[10];
unsigned char b[10];
unsigned char c[10];
};
struct My_Buffer_Type
{
struct More_Buffer_Info buffer_info[100];
};
struct My_Buffer_Type my_buffer[5];
unsigned char *p;
p = (unsigned char *)my_buffer;
除了代码行数更少之外,使用这个还有什么好处:
memset((void *)p, 0, sizeof(my_buffer));
关于这个:
for (i = 0; i < sizeof(my_buffer); i++)
{
*p++ = 0;
}
【问题讨论】:
-
如果
p将指向struct My_Buffer_Type类型的对象,请以这种方式声明它,而不是给它一个不同的类型并用不必要的强制转换使代码混乱。 -
还要考虑初始化:
struct My_Buffer_Type my_buffer[5] = {0};递归地将所有内容初始化为(正确的)0。 -
@sarnold 感谢您的建议。我试图为示例简化一个更复杂的缓冲区。
-
@pmg 该代码实际上用于(最终)清除 spi 缓冲区。它被用作经常调用的函数的一部分。
-
@Embedded:可以简化更复杂的代码。 :)