누구나 GCC에서 strlen()
의 정의를 가르쳐 줄 수 있습니까? 나는 약 0.5 시간 동안 4.4.2를 풀 렸으며 (인터넷 검색은 미친 듯), 실제로 strlen()
이 구현 된 것을 찾을 수없는 것처럼 보입니다.gcc의 strlen() 구현
답변
GCC가 아니라 glibc를보고 있어야합니다. strlen.c
에 정의 된 것 같습니다. strlen.c for glibc version 2.7에 대한 링크가 있습니다. 여기에 glibc SVN repository online for strlen.c에 대한 링크가 있습니다. 당신 gcc가 glibc보고되지해야
그 이유는 다음과 같습니다
GNU C 라이브러리는 리눅스 커널과 으로 C의 GNU 시스템에서 라이브러리와 대부분의 시스템을 사용한다.
이게 당신이 찾고 있는게 있나요? strlen() source. 자세한 내용은 git repository을 참조하십시오. glibc resources page에는 웹보기가 아닌 git 저장소에 대한 링크가 있습니다.
여기
size_t
strlen(const char *str)
{
const char *s;
for (s = str; *s; ++s)
;
return (s - str);
}
컴파일러가 빠른 기계 코드를 생성 할 수있는 날을 여전히 기다리고 있습니다 .... 현재는 최적화 된 * C * 버전의 절반 이하입니다. –
Google Code Search 그런 질문에 대한 좋은 출발점입니다
bsd 구현입니다. 일반적으로 함수의 다양한 소스와 구현을 가리 킵니다. 특정 경우
: 원래 포스터가 이것을 알고하지 않을 수 있습니다 또는이 찾고 있지만
GoogleCodeSearch(strlen)
구글 코드 검색이 완전히 년 3 월 2013 년 종료 된
는, GCC는 내부적으로 인라인 mem *() 함수 및 (gcc 버전에 따라) strlen을 포함하여 자체적으로 정의하는 소위 "내장"c 함수의 수입니다. 이 경우, 라이브러리 버전은 본질적으로 사용되지 않으며, glibc에있는 버전의 사람을 가리키는 것이 엄격히 말하면 정확하지 않습니다. (이것은 성능상의 이유로 - 인라인 자체가 생성하는 개선 외에도 gcc가 함수를 제공 할 때 함수에 대한 특정 사항을 "인식"합니다. 예를 들어 strlen은 순수한 함수이며 따라서 여러 통화를 멀리 최적화, 또는 MEM의 *()에는 앨리어싱가 진행되지 않는 기능.)이 방법에 대한 자세한 내용은
의 경우에 나는이 질문이 4yrs 오래 실현,하지만 GCC http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
참조 #include <string.h>
이 아니라면 자신의 사본을 포함하고 그 답을 포함하지 않습니다 (수락 된 답변 포함).
file_name:line_number: warning: incompatible implicit declaration of built-in function 'strlen'
및 GCC는 -Werror 또는 -fno-내장을 통과하지 않으면 86에 repnz scasb의 ASM의 변형입니다 복사본을 인라인 것입니다 : 당신이 잊어 버린 경우, 당신은 경고를 받게됩니다. 이것과 관련된 파일은 gcc/config/<platform>/<platform>.{c,md}
입니다. 또한 gcc/builtins.c에 의해 제어됩니다. strlen()이 상수에 최적화되었는지 그리고 어떻게 stirlen()이 최적화되었는지 궁금해지면,이 파일에 tree c_strlen(tree src, int only_value)
으로 정의 된 함수를보십시오.또한 strlen (다른 것들 중에서)이 펼쳐지고 접혀지는 방식을 제어합니다. (앞서 언급 한 config/platform을 기반으로합니다.)
저는 이것이 오래된 질문이라는 것을 알고 있습니다. github here에서 리눅스 커널 소스를 찾을 수 있습니다. 32 비트 strlen()에 대한 구현은 github의 strlen_32.c에서 찾을 수 있습니다. 언급 된 파일에는이 구현이 있습니다.
#include <linux/types.h>
#include <linux/string.h>
#include <linux/module.h>
size_t strlen(const char *s)
{
/* Get an aligned pointer. */
const uintptr_t s_int = (uintptr_t) s;
const uint32_t *p = (const uint32_t *)(s_int & -4);
/* Read the first word, but force bytes before the string to be nonzero.
* This expression works because we know shift counts are taken mod 32.
*/
uint32_t v = *p | ((1 << (s_int << 3)) - 1);
uint32_t bits;
while ((bits = __insn_seqb(v, 0)) == 0)
v = *++p;
return ((const char *)p) + (__insn_ctz(bits) >> 3) - s;
}
EXPORT_SYMBOL(strlen);
이 코드는 더 간단 할 수 있습니다.
size_t Strlen (const char * _str)
{
size_t i = 0;
while(_str[i++]);
return i;
}
- 1. 빠른 strlen?
- 2. strlen 및 특수 문자
- 3. PHP 나 strlen 질문
- 4. 데이터베이스에서 행 선택 strlen
- 5. 빠른 strlen 질문
- 6. 최소 문자 길이, strlen?
- 7. strlen 문자열의 끝 사용
- 8. C : sprintf와는 나 strlen
- 9. PHP 나 strlen 기능과 2
- 10. 컴파일 타임 "strlen()"이 효과적입니까?
- 11. PHP substr 및 strlen 대체
- 12. GCC의 부동 소수점 연산
- 13. C GCC의 함수 정렬
- 14. GCC의 레지스터 값 덤프
- 15. -lgcc_s와 gcc의 차이점
- 16. gcc의 라이브러리에 연결
- 17. GCC의 unordered_map 오류
- 18. GCC의 LPDWORD, LPSTR 핸들
- 19. 플로트 코드와 GCC의 일관된 동작
- 20. windows 및 gcc의 목적 c
- 21. GCC의 .a 및 .o 파일
- 22. gcc의 어셈블리 문과 관련된 문제
- 23. PHP strlen - 문자열 길이에 따라 숫자를 추가합니다.
- 24. 기본 C++ 메모리 할당 및 strlen
- 25. PHP 함수 strlen()의 알고리즘 복잡성
- 26. Strlen C++처럼 작동 할 함수
- 27. C++ 11 char16_t strlen 동등한 함수
- 28. C++ HashTable 개체 구현
- 29. GCC의 libstdC++에 Windows의 디버그 기호가 있습니다.
- 30. gcc의 공유 라이브러리에서 프로필을 통한 최적화가 가능합니까?
나는 glibc가있어 보이지 않을 것입니다. 꽤 멋진. 머리를 가져 주셔서 감사합니다. –
Meh, 그다지 최적화되지 않았습니다. 적어도 Visual C++에서는 괜찮은 어셈블리 언어 strlen을 얻습니다. – toto
"GNU C 라이브러리는 주로 휴대용 고성능 C 라이브러리로 설계되었습니다." 나는 그들이 이식성 부분에 더 많은 무게를두고 있다고 생각하고있다. –