Systemnahe Programmierung in Chome Systemnahe Programmierung in C: strlen Prof. Dr. Uwe Schmidt FH Wedel

strlen

weiter

weiter

Implementierung der strlen-Funktion

strlen
zur Berechnung der Länge einer Zeichenreihe kann auf verschiedene Arten formuliert werden.
Die 1. Version ist in einem "Pascal-ähnlichen" Stil mit indizierten Zugriffen geschrieben.
Die 2. Version arbeitet mit Zeigerarithmetik und Zeigersubtraktion.
weiter

weiter

Die 1. Version: strlen1.c

   1#include <stdlib.h>
   2
   3size_t
   4strlen1 (char *str)
   5{
   6  size_t i = 0;
   7
   8  while (str[i] != 0)
   9    ++i;
  10
  11  return i;
  12}
weiter

weiter

Der Assembler-Code: gcc -O2 -o strlen1-O.s -S strlen1.c

1 strlen1:
2 movl $0, %eax
3 cmpb $0, (%rdi)
4 je .L2
5 .L3:
6 addq $1, %rax
7 cmpb $0, (%rdi,%rax)
8 jne .L3
9 .L2:
10 rep
11 ret
weiter

weiter

Die 2. Version: strlen2.c

   1#include <stdlib.h>
   2
   3size_t
   4strlen2 (char *str)
   5{
   6  char *ptr = str;
   7
   8  while (*ptr++);
   9
  10  return (ptr - str) - 1;
  11}
weiter

weiter

Der Assembler-Code: gcc -O2 -o strlen2-O.s -S strlen2.c

1 strlen2:
2 movq %rdi, %rax
3 .L2:
4 movzbl (%rax), %edx
5 addq $1, %rax
6 testb %dl, %dl
7 jne .L2
8 subq %rdi, %rax
9 subq $1, %rax
10 ret
weiter

Letzte Änderung: 12.11.2009
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel