คำถามติดแท็ก strlen

8
ทำไม strlen ของ 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 …

18
strlen จะถูกคำนวณหลายครั้งหากใช้ในเงื่อนไขการวนซ้ำ?
ฉันไม่แน่ใจว่าโค้ดต่อไปนี้อาจทำให้เกิดการคำนวณซ้ำซ้อนหรือเป็นรหัสเฉพาะของคอมไพเลอร์ for (int i = 0; i < strlen(ss); ++i) { // blabla } จะstrlen()คำนวณทุกครั้งเมื่อiเพิ่มขึ้น?
109 c++  c  gcc  optimization  strlen 

2
การเพิ่มประสิทธิภาพที่ไม่คาดคิดของ strlen เมื่อสร้างสมนามอาร์เรย์ 2 มิติ
นี่คือรหัสของฉัน: #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 …

4
ทำไมฟังก์ชั่นนี้คืนความยาวที่ถูกต้องของสตริง? (การเพิ่มตัวชี้ถ่าน)
นี่คือฟังก์ชั่นที่นับจำนวนตัวอักษรในสตริง: int str_len(const char* s) { int i = 0; while(*(s++)) { i++; } return i; } ทำไมสิ่งนี้ถึงส่งคืนความยาวที่ถูกต้อง? "a"สมมติว่าผมเรียกฟังก์ชั่นนี้ด้วยเชือกที่เรียบง่าย จากนั้นsจะเพิ่มขึ้นในขณะที่ลูปดังนั้นค่าของsและiเป็นทั้ง 0
12 c  while-loop  strlen  c89 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.