Questions tagged «strlen»

8
为什么要快速运行glibc的复杂性太复杂?
我在这里浏览strlen代码,想知道是否确实需要代码中使用的优化?例如,为什么下面这样的东西不能同样好或更好? unsigned long strlen(char s[]) { unsigned long i; for (i = 0; s[i] != '\0'; i++) continue; return i; } 较简单的代码对编译器进行优化是否更好或更容易? strlen链接后面页面上的代码如下所示: /* Copyright (C) 1991, 1993, 1997, 2000, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Torbjorn Granlund (tege@sics.se), with …


2
混淆二维数组时strlen的意外优化
这是我的代码: #include <string.h> #include <stdio.h> typedef char BUF[8]; typedef struct { BUF b[23]; } S; S s; int main() { int n; memcpy(&s, "1234567812345678", 17); n = strlen((char *)&s.b) / sizeof(BUF); printf("%d\n", n); n = strlen((char *)&s) / sizeof(BUF); printf("%d\n", n); } 使用gcc 8.3.0或8.2.1以及任何优化级别,但我期望的是-O0此输出。编译器决定将限制于,因此永远不能等于或超过被除以的值。0 22 2strlenb[0] 这是我的代码中的错误还是编译器中的错误? 标准中并未明确阐明这一点,但是我认为指针来源的主流解释是,对于任何对象X,代码(char *)&X都应生成一个可以迭代整个对象的指针X-即使X碰巧具有子数组作为内部结构。 (奖金问题,是否有gcc标志来关闭此特定优化?)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.