문제

Malloc을 사용하고 유사한 메모리 조작을 할 때 항상 1 인 크기 (char)에 의존 할 수 있습니까?

예를 들어 유형의 N 요소에 대한 메모리를 할당해야합니다. char. 곱합니다 sizeof( char ) 필요한:

char* buffer = malloc( N * sizeof( char ) );

아니면 (char)의 크기에 의존 할 수 있습니까?

char* buffer = malloc( N );

나는 그것을 완전히 이해합니다 sizeof 컴파일 중에 평가 된 후 컴파일러는 곱셈을 컴파일 할 수 있으므로 성능 페널티가 최소화되고 대부분 0이됩니다.

주로 코드 선명도와 휴대성에 대해 묻습니다. 이 곱셈입니까? 필요한 ~을 위한 char 유형?

도움이 되었습니까?

해결책

필요하지는 않지만 코드를 더 읽기 쉽게 만들고 마법 번호의 사용을 피하기 때문에 크기 (char)를 떠나는 것이 좋습니다. 또한 숯 대신에 코드를 변경 해야하는 경우 해당 객체의 포인터로 무언가의 크기를 mallocing하는 경우 "1"만있는 경우보다 코드를 변경하는 것이 더 쉽습니다.

다른 팁

정의에 따르면 (char) 크기는 항상 1과 같습니다. 하나의 바이트는 C의 문자 크기입니다. 바이트의 비트 수는 (일반적인 데스크탑 CPU의 8)입니다.

하나의 바이트가 8 비트가 아닌 일반적인 예는 PDP-10 그리고 9/36 비트 바이트를 가진 다른 오래된 미니 컴퓨터 유사 아키텍처. 하지만 2^N이 아닌 바이트는 극도로 드문 일이되고 있습니다.

또한 이것이 더 나은 스타일이라고 생각합니다.

char* buf1;
double* buf2;

buf1 = malloc(sizeof(*buf1) * N);
buf2 = malloc(sizeof(*buf2) * N);

포인터 유형이 무엇이든 작동하기 때문입니다.

sizeof(char) 어떤 유형의 메모리 조작을하든 항상 1입니다.

하지만, sizeof(TCHAR) 컴파일러 옵션에 따라 다를 수 있습니다.

나는 그것이 일종의라고 생각합니다 패턴 방지. 프로그래머는 자신이하고있는 일을 잘 몰랐다는 신호를 보냈으며, 이는 나머지 코드를 모호한 빛으로 즉시 캐스팅합니다.

물론, 그것은 (위키 백과 인용) "비효율적"이 아니지만 "최적에서 멀리 떨어진"것을 발견합니다. 런타임에는 비용이 들지 않지만 불필요한 쓰레기로 코드를 방해하는 반면 누군가가 필요하다고 생각했다는 신호를 보냅니다.

또한 표현식은 함수 통화로 구문 분석되지 않습니다. sizeof 기능이 아닙니다. 당신은 그것을 마법의 상징으로 전달하는 함수를 부르지 않습니다. char. 내장 된 단백질 접두사 연산자를 적용하고 있습니다 sizeof 표현에, 그리고 당신의 표현은이 경우 유형에 대한 캐스트입니다. char, C에서는 다음과 같이 작성되었습니다 (char).

가능하며 가능할 때마다 사용하는 것이 좋습니다. sizeof 다른 표현식에서는 표현식 값의 크기를 산출합니다.

char a;
printf("A char's size is %u\n", (unsigned int) sizeof a);

이것은 인쇄됩니다 1, 항상, 모든 순응 C 구현에서.

나는 또한 David Cournapeau에 크게 동의하고 유형을 반복하는 것을 고려합니다. 이름 안에 malloc()-에게 전화 해 또한 일종의 반란이 되십시오.

대신에

char *str;

str = malloc(N * sizeof (char));

많은 사람들이 n- 문자 용량 스트링 버퍼를 할당하기 위해 글을 쓸 것입니다.

char *str;

str = malloc(N * sizeof *str);

또는 (문자열에만 해당) 생략 sizeof 위와 같이, 그러나 이것은 물론 더 일반적이며 모든 유형의 포인터와 마찬가지로 작동합니다.

필요하지 않습니다. 보다 여기 (예를 들어).

sizeof(char) C 표준에 의해 항상 정의됩니다 1 (바이트). 이에 주목하십시오 sizeof 여러 가지를 반환합니다 바이트 바이트 당 비트 수는 관련이 없습니다 (그리고 실용적으로는 8입니다).

명심해야 할 다른 것은 컴파일러가 정적으로 크기 (char)의 값을 알고 있다는 것입니다. 또한 숫자를 숫자를 곱하면 곱셈을 수행 할 필요가 없음을 의미합니다. 컴파일러는이를 최적화합니다. 성과의 우려는 이러한 근거를 고려하지 않아야합니다.

"새로운 C 표준. 경제 및 문화 논평"에서.

  1. 통계 : 크기의 2.0%가 가져 왔습니다 char 그리고 1.5% - unsigned char. 1.2 버전의 책에서 1033 페이지.
  2. 1037 페이지.

문자 유형의 표현에서 비트 수는 관련이 없습니다. 정의에 따르면 바이트의 바이트 수는 문자 유형이 하나입니다.

코딩 지침 개발자는 때때로 8 비트를 포함하는 것처럼 바이트를 연관시킵니다. 문자 유형이 16 비트 인 호스트에서는 문자 유형에 크기를 적용하면 값이 2를 반환한다는 잘못된 가정으로 이어질 수 있습니다. 이러한 문제는 다른 곳에서 논의됩니다.

크기 (char)를 사용하면 코드가 더 읽기 쉽고 휴대용이 가능합니다.

x86에서 우리는 캐릭터가 1 바이트라는 것을 알고 있습니다. 그러나 명시 적으로 그것을 적어두면 의도를 더 명확하게 만드는 데 도움이됩니다. 이는 항상 좋은 일입니다.

또한 캐릭터가 1 바이트가 아닌 다른 플랫폼에 코드를 넣으면 어떻게해야합니까? 캐릭터가 대신 4 비트에 불과한 경우 어떻게해야합니까?

동의 할 필요는 없지만 런타임 속도를 늦추지 않으며 드문 경우 다른 아키텍처로 코드를 포트해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top