programing

왜 memset은 char가 아닌 int를 사용합니까?

goodcopy 2022. 7. 27. 22:14
반응형

왜 memset은 char가 아닌 int를 사용합니까?

왜?memset을 받아들이다int대신 두 번째 의론으로서char,반면에.wmemset를 취득하다wchar_t같은 것이 아니라long또는long long?

memsetC에 기능 프로토타입을 추가하기 전(상당히 이전)입니다.시제품이 없으면 통과할 수 없습니다.char어떤 함수로 -- 당신이 시도한다면, 그것은 로 승격될 것입니다.int통과했을 때, 그리고 함수가 받는 것은int.

(C++는 아니지만) C에서는 문자 그대로 다음과 같은 문자를 사용할 수 있습니다.'a'유형이 없습니다.char-- 타입이 있습니다.int그래서, 당신이 통과했던 것은 보통 출발할 입니다.int어쨌든.기본적으로 그것이 char로 시작되어 승진하기 위한 유일한 방법은 당신이 합격하는 것이다.char변수.

이론상으로는memset아마 수정이 가능하기 때문에char대신int하지만 어떤 이점도 없을 것 같고, 오래된 코드나 다른 코드를 해독할 가능성도 꽤 있습니다.알 수 없지만 잠재적으로 상당히 높은 비용이 들 수 있고 실질적인 이익을 얻을 가능성이 거의 없기 때문에, 저는 이 제품을 받을 수 있는 가능성이 있다고 생각합니다.char"time"과 "none" 사이의 선상에 놓입니다.

편집(댓글에 응답):CHAR_BIT의 최하위 비트int타겟에 쓸 값으로 사용됩니다.

아마 이 기능하는 이유와 같은 이유일 것입니다. <ctypes.h>가지고 가다 ints가 아니라 chars.

대부분의 플랫폼에서는char스택 자체에 푸시하기에는 너무 작기 때문에 보통 머신의 워드 사이즈에 가장 가까운 타입을 푸시합니다.int.

@Gui13의 코멘트 링크에서 알 수 있듯이 이를 통해 퍼포먼스도 향상됩니다.

프레드의 답변을 보세요. 실적 때문입니다.

제 쪽에서는 다음 코드를 시도했습니다.

#include <stdio.h>
#include <string.h>

int main (int argc, const char * argv[])
{
    char c = 0x00;

    printf("Before: c = 0x%02x\n", c);
    memset( &c, 0xABCDEF54, 1);
    printf("After:  c = 0x%02x\n", c);

    return 0;
}

64비트 Mac에서는 다음과 같은 정보를 얻을 수 있습니다.

Before: c = 0x00
After:  c = 0x54

보시다시피 마지막 바이트만 기록됩니다.이것은 아키텍처(엔디안니스)에 따라 다르다고 생각합니다.

언급URL : https://stackoverflow.com/questions/5919735/why-does-memset-take-an-int-instead-of-a-char

반응형