programing

메모리의 기능에는 memset, memchr 등이 있습니다.string.h에 있는데 다른 mem 함수와 함께 stdlib.h에 없나요?

nicescript 2022. 7. 14. 21:35
반응형

메모리의 기능에는 memset, memchr 등이 있습니다.string.h에 있는데 다른 mem 함수와 함께 stdlib.h에 없나요?

왜 다음과 같은 기능을 하는지 궁금하다.
-메모셋
-memmov
- 메모리
-메모리

string.h 헤더 파일에는 존재하지만 stdlib.h 파일에는 존재하지 않습니다.이 파일에는 malloc, calloc, realloc, free 등의 다이내믹 메모리 할당으로 다른 표준 메모리 기능이 있습니다.

한 헤더로 묶는 게 낫지 않을까요?당신은 그것에 대해 어떻게 생각하세요?메모리 함수의 1세트가 다른 기능으로부터 분리되어 문자열 헤더(string.h )에 존재하는 이유를 이해할 수 없습니다.

왜냐하면 사실string.h는 문자열뿐만 아니라 문자 배열을 처리하는 함수를 선언하는 표준 헤더로 정의됩니다.다음과 같은 기능memcpy그리고.memset문자 유형 배열 객체의 첫 번째 요소에 대한 포인터로 취급되는 인수를 사용합니다.

(C99, 7.21.1p1) 헤더< string . h >는 1종류의 기능과 여러 함수를 선언하고 문자형 배열 및 문자형 배열로 취급되는 기타 오브젝트를 조작하는데 유용한 매크로를 정의합니다.

난 정말 그 생각을 안 할 거야string.h는, 「메모리」기능으로서 기능합니다.대신에, 메모리 시퀀스에 포함되는 데이터상에서 동작하기 때문에, 「어레이」함수라고 생각합니다.반대로malloc(및 기타) 메모리 영역 내에서 데이터를 조작하는 것이 아니라 할당과 같은 메모리 서비스를 실제로 제공합니다.

특히, 의 기능은string.h메모리의 할당이나 할당 해제, 또는 메모리 관리의 어떠한 형태도 실시하지 말아 주세요.같은 기능이라도char * strerror(int)는 완전히 새로운 문자열을 작성하는 것처럼 보이지만 실제로는 스태틱하게 변환된 문자열이기 때문에 할당은 이루어지지 않습니다.다른 함수는 메모리 블록으로 포인터를 반환할 수 있지만, 실제로는 그 파라미터 중 하나일 뿐입니다(예:memcpy또는 서브스트링의 선두에 포인터를 되돌립니다(strtok또는 비교를 나타내는 정수(memcmp).

반면에,stdlib.h기억의 문제도 아닙니다.의 설계stdlib.h다수의 프로그램이 필요로 하는 범용적인 조작을 제공하는 것입니다.메모리 기능은 그러한 기본 동작의 예시일 뿐입니다.그러나 다른 기능은 다음과 같습니다.exit ★★★★★★★★★★★★★★★★★」system좋은 예이기도 하지만 기억에는 적용되지 않습니다.

, 그럼 이번에는 '아까보다'에 몇 기능이 .stdlib.h 를 IMO에 할 수 .string.h 함수다양한 변환 함수)를 사용합니다.mbstowcs,wcstombs,atoi,strtod (등)도 있습니다.bsearch ★★★★★★★★★★★★★★★★★」qsort은 '이러다'입니다.string.h(어레이에서 동작하거나 새로 할당된 메모리 블록을 반환하지 않는 등) 기능을 수행합니다.

에서 보면, 이 두 가지를 , 이 두 것은 상당히 가 있다고 할 수 있습니다.mem* functions functions functions functions 、 。malloc,realloc,calloc ★★★★★★★★★★★★★★★★★」freeC 표준 라이브러리는 이런 식으로 재구성되지 않습니다.이러한 변경은 확실히 암호를 해독할 수 있습니다.또한.stdlib.h그리고.string.h는 매우 오랫동안 존재해 왔으며, 둘 다 매우 유용하고 기본적인 라이브러리이기 때문에 변경으로 인해 대부분의 (또는 적어도 많은) C 코드가 깨질 수 있습니다.

Pre-Standard C에서는 이들 함수는 실제로 다른 곳에서 정의되어 있지만, 어느 쪽에서도 정의되어 있지 않습니다.stdlib.h다른 표준 헤더에서도 사용할 수 없지만memory.h아직 시스템에 존재할 수 있습니다.OS X(현시점에서는)에도 존재할 수 있습니다.

memory.hOS X 10.11(라이센스 헤더 없음):

#include <string.h>

파일 전체가#include입력string.h이전 표준 C 프로그램과의 하위 호환성을 유지합니다.

과거의 고려 사항 외에, 다음과 같은 데이터 조작 유틸리티의 분리string.h시스템 기능은 다음과 같습니다.mallocstdlib.hoperating system이 지정되어 있지 않은 콘텍스트를 생각하면 매우 의미가 있습니다.임베디드 시스템에는 RTOS가 탑재되어 있을 수도 있고 탑재되어 있지 않을 수도 있습니다.또, 표준 메모리 할당을 사용할 수도 있고, 사용할 수도 없는 경우도 있습니다.단, 다음과 같은 유틸리티는strcpy그리고.memcpy는 외부 시스템에 의존하지 않기 때문에 컴파일된 코드를 실행할 수 있는 모든 컨텍스트에서 실행할 수 있다는 점에서 유사한 공간을 차지합니다.개념적으로나 실질적으로나 이들을 조합하여 보다 복잡한 시스템 호출에서 분리하는 것이 좋습니다.

언급URL : https://stackoverflow.com/questions/9782126/why-memory-functions-such-as-memset-memchr-are-in-string-h-but-not-in-stdli

반응형