문제

사용 목적은 무엇입니까 sizeof 사용하여 malloc ~에 C?왜 필요한가요?

내 말은, 우리가 사용할 수 있다는 거야 sizeof 그런데 우리는 메모리에 할당하려는 크기(=1000바이트)를 이미 알고 있습니까?

저는 C 초보자입니다.이것은 매우 당연한 질문일 수 있습니다.

도움이 되었습니까?

해결책

데이터 유형과 메모리 문제

답은 데이터 유형에 있습니다.당신이 아는 동안 얼마나 많은 물건 메모리를 할당하려는 경우, 메모리 크기를 정신적으로 계산하는 수고를 겪고 싶지 않을 수도 있습니다.

유지보수성도 마찬가지입니다

또한, 나중에 이들의 구성이 바뀌면 어떻게 될까요?그럼 당신은 망했고 모든 것을 편집해야합니다.

따라서 이는 맥락 없이는 귀하의 예와 관련이 없습니다.그러나 더 복잡한 것(예: 여러 필드가 있는 구조체)에 메모리를 할당하려는 경우에는 매우 중요하고 유용합니다.

예제 1(여기서는 그다지 중요하지 않음):

char *s = malloc(100 * sizeof(char));

하지만 이봐, 그건 그냥 char괜찮아요. 그렇게 했을 수도 있어요:

char *s = malloc(100);

일반적으로 작동합니다.하지만 아래에서 볼 수 있듯이 자신의 발에 총을 쏘았습니다.

예 2(이미 약간 중요함):

int *i = malloc(100 * sizeof(int));

물론, 다음과 같이 작성할 수도 있습니다.

int *i = malloc(100 * 4);

즉, 당신이 꽤 잘 알고 있는 하나의 아키텍처에 대해서만 개발한다고 가정합니다.

예 3(상당히 중요해지기 시작했습니다!):

typedef struct s_listelement{
    int                  dataitem;
    struct s_listelement *link;
}              t_listelement;

t_listement *le = malloc(sizeof(t_listelement));

이제 연결된 목록 항목의 구조에 다른 필드가 많이 포함되어 있다고 상상해 보세요.

믿고 싶나요? sizeof(), 아니면 가서 재미있게 놀고 직접 계산해 볼까요?

다른 팁

저장을 위해 메모리를 할당한다고 가정합니다. int에스.귀하의 초기 추측은 다음과 같습니다. 알겠습니다. n 정수와 각 정수에는 x 바이트.그래서 공간은 n*x 바이트.

그런데 사실 이 x 아키텍처에 따라 다릅니다.아마도 16비트, 32비트 등일 것입니다.따라서 코드를 다양한 환경에서 작동할 수 있도록 하려면 다음을 사용하는 것이 좋습니다. n*sizeof(int) 대신에 n*x.

예를 들어, 10개의 정수에 공간을 할당해야 하는 경우:

int *p=malloc(sizeof(int)*10);

크기를 변경하면 어떻게 되나요? mallocated?

1) 새 크기를 다시 계산해야 합니다(각 대상에서 새 크기를 계산해야 하는 여러 대상 아키텍처 문제는 제외). 2) 모든 대상을 검색해야 합니다. malloc(1000), 그것이 다음을 참조하는지 확인하세요 mallocated (명확하지 않을 수도 있음) 새 크기로 교체하십시오.

다음 두 가지 문제 중 하나도 사용하지 마세요. sizeof.따라서 사용하여 sizeof 더 유지 관리하기 쉽고 읽기 쉬운 코드로 이어집니다.

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