gpt4 book ai didi

c++ - C中的内存访问优化

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:07:37 24 4
gpt4 key购买 nike

我必须用 C 语言编写快速右裁剪函数。我的第一次尝试是:

void TrimRight( char *s )
{
char* pS;
if (!*s)
return;
if (!s)
return;
for ( pS = s + strlen(s) - 1; isspace(*pS) && (pS >= s); pS--)
{
pS[1] = '\0';
}
}

第二次尝试:

void TrimRight( char *s )
{
if (!*s)
return;
if (!s)
return;
char* pS = s + strlen(s) - 1;
while ((*pS == ' ') && (pS > s))
{
(*pS--) = '\0';
}
}

问题是:我在这里改进了内存访问吗?我怎样才能进一步优化它?一般如何优化内存访问?

更新:按递增顺序扫描内存是否更快?

最佳答案

一开始我不会理会测试。传递有效字符串应该是函数的要求,它避免了 !s 测试,并且 !*s 是多余的(此外,将 !s 第二个测试意味着您将首先在 !*s 上崩溃。此外,您可以通过跟踪最后一个非空白字符来避免双向扫描(strlen 以一种方式扫描,while 循环以另一种方式扫描):

char* TrimRight(char *s)
{
// ws tracks the char after the last non-whitespace char.
char* ws = s;
while (*s)
if (s++ != ' ') // or !isspace(s++)
ws = s;
*ws = '\0';
return ws; // Knowing where the trimming occurred might come in handy.
}

编辑:请注意,strlen 可能比扫描空格更快(见评论)。

关于c++ - C中的内存访问优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8295028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com