Bonjour
Je voudrais savoir si on peut avoir accés au code source des fonctions qui se trouve dans stdlib.h ?
Plus précisément je voudrais voir (ou du moins connaître l'algorithtme) de la fonction rand() de stdlib.h et srand().
Merci
Bonjour
Je voudrais savoir si on peut avoir accés au code source des fonctions qui se trouve dans stdlib.h ?
Plus précisément je voudrais voir (ou du moins connaître l'algorithtme) de la fonction rand() de stdlib.h et srand().
Merci
Salut,
Ya plein de liens
http://www.eglibc.org/cgi-bin/viewcv.../libc/#dirlist
http://www.opensource.apple.com/source/Libc/Libc-583/
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/
Et plein d'autres ... Il suffit de chercher ^^
Merci,
Sur mon PC j'ai une distribution linux dans laquelle on peut parfaitement trouver le fichier stdlib.h. Est ce que tu sais si les sources comme on les voit sur les sites que tu m'as donnés sont également quelque part dans la distribution linux ou un pacquet ?
Je voudrais être sur que le code que je vois est celui que j'utilise.
Je ne crois pas que les sources soient disponibles sur ta machine (peut-être que je me trompe).
Pour être sûr d'avoir les sources de ta distribution il faut que tu regardes sur le site de ta distrib de Linux et que tu trouves ton fichier
Quelle est ta distrib ?
Une RedHat, le terminal me donne ça :
RHEL_5__x86_64
si c'est plus facile, chez moi c'est une ubuntu 9.10
RedHat c'est par là : http://sources.redhat.com/glibc/
euh ... je vais faire mon boulet mais comment tu t'y retrouve là dedans ?
Mon terminal me donne ça
Il faut que je choississe une version de glibc ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 gcc -v Using built-in specs. Target: x86_64-redhat-linux Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=x86_64-redhat-linux Thread model: posix gcc version 4.1.2 20080704 (Red Hat 4.1.2-44)
Heuu ... par défaut je prendrais la dernière version
Tu peux télécharger la totale en prenant le lien ftp dans Availability le lien c'est "available by anonymous ftp."
Sinon en ligne : http://sourceware.org/git/?p=glibc.g...98381c640ab06f
Merci,
Effectivement j'avais téléchargé la dernière ... D'après les commentaires des fichiers qui m'intéressent, les derniers copyright datent de 2005 ou 1995 voir moins ... je pense que ma machine est plus récente même pour 2005.
Ca ne veut rien dire
Le fichier n'est pas obligé d'être retouché tous les ans pour qu'il soit 'à jour'. Si la dernière émission est correcte (sans bug etc.) il n'y a aucune raison de le modifier
Je comprend pas
Bien entendu si il n'y a ni bug ni amélioration intéressante, le fichier n'a pas intéret à être modifié mais quel est le lien avec ce que je disais par rapport au copyright ?
Dans tous les cas les dates des fichiers sont vielles donc ils ne sont pas récent !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 -rw-r----- 1 ***** pmc 1.5K Jul 6 2001 rand_r.c -rw-r----- 1 ***** pmc 991 Jul 6 2001 rand.c -rw-r----- 1 ***** pmc 13K Dec 16 2002 random.c -rw-r----- 1 ***** pmc 13K Apr 12 2005 random_r.c
Oublie ce que j'ai dit j'ai loupé un épisode
Salut
Au fait je me pose une question, est ce qu'il y a une librairies particulière pour les architectures 64 bits (comme la mienne ) ? Ou est ce que la librairie est écrite de façon à ce que le code soit portable en 32 comme en 64 bits ?
Merci
Il peut y avoir des bibliothèques particulières, mais en général c'est le même code qui est simplement compilé en 64 bits.
Un exemple de code standard qui fait attention à l'architecture (lien donné plus haut lib FreeBSD) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109 /*- * Copyright (c) 2009 Xin LI <delphij@FreeBSD.org> * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include <sys/cdefs.h> __FBSDID("$FreeBSD: src/lib/libc/string/strlen.c,v 1.7.2.1.2.1 2009/10/25 01:10:29 kensmith Exp $"); #include <sys/limits.h> #include <sys/types.h> #include <string.h> /* * Portable strlen() for 32-bit and 64-bit systems. * * Rationale: it is generally much more efficient to do word length * operations and avoid branches on modern computer systems, as * compared to byte-length operations with a lot of branches. * * The expression: * * ((x - 0x01....01) & ~x & 0x80....80) * * would evaluate to a non-zero value iff any of the bytes in the * original word is zero. However, we can further reduce ~1/3 of * time if we consider that strlen() usually operate on 7-bit ASCII * by employing the following expression, which allows false positive * when high bit of 1 and use the tail case to catch these case: * * ((x - 0x01....01) & 0x80....80) * * This is more than 5.2 times as fast as the raw implementation on * Intel T7300 under long mode for strings longer than word length. */ /* Magic numbers for the algorithm */ #if LONG_BIT == 32 static const unsigned long mask01 = 0x01010101; static const unsigned long mask80 = 0x80808080; #elif LONG_BIT == 64 static const unsigned long mask01 = 0x0101010101010101; static const unsigned long mask80 = 0x8080808080808080; #else #error Unsupported word size #endif #define LONGPTR_MASK (sizeof(long) - 1) /* * Helper macro to return string length if we caught the zero * byte. */ #define testbyte(x) \ do { \ if (p[x] == '\0') \ return (p - str + x); \ } while (0) size_t strlen(const char *str) { const char *p; const unsigned long *lp; /* Skip the first few bytes until we have an aligned p */ for (p = str; (uintptr_t)p & LONGPTR_MASK; p++) if (*p == '\0') return (p - str); /* Scan the rest of the string using word sized operation */ for (lp = (const unsigned long *)p; ; lp++) if ((*lp - mask01) & mask80) { p = (const char *)(lp); testbyte(0); testbyte(1); testbyte(2); testbyte(3); #if (LONG_BIT >= 64) testbyte(4); testbyte(5); testbyte(6); testbyte(7); #endif } /* NOTREACHED */ return (0); }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager