반응형

C 251

한 번에 여러 개의 값을 구조체에 할당하는 방법

한 번에 여러 개의 값을 구조체에 할당하는 방법 구조 Foo 초기화 시 다음과 같이 할 수 있습니다. Foo foo = {bunch, of, things, initialized}; 하지만 난 이걸 할 수 없어. Foo foo; foo = {bunch, of, things, initialized}; 두 가지 질문이 있습니다. 후자는 왜 할 수 없는 거죠?전자는 초기화 전용 컨스트럭터입니까? 두 번째 예시와 유사한 작업을 수행할 수 있는 방법은 무엇입니까? 즉, 이미 초기화된 후 한 줄의 코드로 구조체의 변수를 선언하는 것입니다.변수가 많은 대형 구조물에 대해서는 이 작업을 수행할 필요가 없습니다. Foo foo; foo.a = 1; foo.b = 2; foo.c = 3; //... ad infinitum ..

programing 2022.06.10

uint_fast32_t보다 uint32_t가 선호되지 않는 이유는 무엇입니까?

uint_fast32_t보다 uint32_t가 선호되지 않는 이유는 무엇입니까? 인 것 같다uint32_t보다 훨씬 더 널리 퍼지고 있다uint_fast32_t(이것이 일화적인 증거라는 것을 알고 있습니다).하지만 그건 직관에 어긋나는 것 같아요. 구현의 용도를 보면 거의 항상uint32_t필요한 것은 최대 4,294,967,295(통상 65,535 ~4,294,967,295 사이의 하한)의 값을 유지할 수 있는 정수입니다. 그럼 좀 이상한데?uint32_t'syslog 32bits' 보증이 필요하지 않으며 'syslog available >= 32bits' 보증이 필요 없기 때문에uint_fast32_t딱 맞는 생각인 것 같아요게다가, 통상, 실장되고 있는 동안은,uint32_t실제로 존재한다고 보장되..

programing 2022.06.10

부호 없는 정수와 부호 있는 정수의 성능

부호 없는 정수와 부호 있는 정수의 성능 서명된 정수보다 부호 없는 정수를 사용하여 성능 이득/손실이 있습니까? 그렇다면 이것도 짧은 시간이고 긴 시간인가요?2의 거듭제곱으로 나누면unsigned int1교대 명령으로 최적화할 수 있기 때문입니다.와 함께signed int디비전은 0을 향해 반올림하지만 올바른 반올림으로 전환하기 때문에 일반적으로 더 많은 기계 명령이 필요합니다.예: int foo(int x, unsigned y) { x /= 8; y /= 8; return x + y; } 여기 관련 정보가 있습니다.x부품(서명된 분할): movl 8(%ebp), %eax leal 7(%eax), %edx testl %eax, %eax cmovs %edx, %eax sarl $3, %eax 그리고 여기 ..

programing 2022.06.10

ANSI C를 사용하여 밀리초 단위로 시간을 측정하는 방법은 무엇입니까?

ANSI C를 사용하여 밀리초 단위로 시간을 측정하는 방법은 무엇입니까? ANSI C만을 사용하여 밀리초 이상의 정밀도로 시간을 측정하는 방법이 있습니까?time.h를 브라우징하고 있었는데 2차 정밀함수밖에 찾을 수 없었습니다.1초 이상의 분해능을 제공하는 ANSI C 함수는 없지만 POSIX 함수는 마이크로초 분해능을 제공합니다.클럭 함수는 프로세스가 실행에 소요된 시간만 측정할 뿐 대부분의 시스템에서는 정확하지 않습니다. 이 기능은 다음과 같이 사용할 수 있습니다. struct timeval tval_before, tval_after, tval_result; gettimeofday(&tval_before, NULL); // Some code you want to time, for example: sl..

programing 2022.06.09

C에서 순환 버퍼를 구현하려면 어떻게 해야 합니까?

C에서 순환 버퍼를 구현하려면 어떻게 해야 합니까? 어떤 유형의 오브젝트도 저장할 수 있는 고정 크기(컴파일 시간이 아닌 런타임에 선택 가능) 원형 버퍼가 필요하며 매우 고성능이어야 합니다.멀티태스킹 임베디드 환경이지만 공동 작업이기 때문에 리소스 경합 문제는 없을 것입니다. 처음에 생각한 것은 타입(단순 열거/정의)과 페이로드에 대한 보이드 포인터를 포함하는 단순한 구조를 버퍼에 저장하는 것이었습니다만, 가능한 한 고속으로 하고 싶기 때문에, 힙 바이패스를 포함한 제안을 받아들일 수 있습니다. 표준 중 만족스러운 되어 것 .코드에서 본 바로는 CPU에 크게 최적화되어 있지 않습니다.C코드를 컴파일 했을 뿐입니다.strcpy()손으로 코딩한 조립품도 없어요 어떤 코드나 아이디어라도 매우 감사할 것입니다...

programing 2022.06.09

C에서의 해시 맵의 실장

C에서의 해시 맵의 실장 닫혔어. 이 질문은 좀 더 자세히 설명해야 합니다.초점을 맞춥니다.현재 답변을 받고 있지 않습니다. 이 질문을 개선하시겠습니까?이 게시물을 편집하여 하나의 문제에 초점을 맞추도록 질문을 업데이트하십시오. 3년 전에 문을 닫았어요 이 질문을 개선하다 C++ STL에 있는 것처럼 C에 해시맵을 처음부터 작성하는 방법은 무엇입니까? 어떤 파라미터가 고려되고 해시맵은 어떻게 테스트됩니까?에서와 같이 해시맵이 완료되었다고 말하기 전에 실행하는 벤치마크 테스트 케이스는 무엇입니까?기본만 알면 어렵지 않을 거예요. 일반적으로 키와 값을 포함하는 "버킷"이라는 어레이를 만들고 옵션 포인터를 사용하여 링크 목록을 만듭니다. 키를 사용하여 해시 테이블에 액세스하면 정수를 반환하는 커스텀 해시 함수..

programing 2022.06.09

"size of (a? true : false)"는 왜 4바이트의 출력을 제공합니까?

"size of (a? true : false)"는 왜 4바이트의 출력을 제공합니까? 난 이 사건에 대한 작은 코드를 가지고 있다.sizeof연산자가 : #include #include int main() { bool a = true; printf("%zu\n", sizeof(bool)); // Ok printf("%zu\n", sizeof(a)); // Ok printf("%zu\n", sizeof(a ? true : false)); // Why 4? return 0; } 출력(GCC): 1 1 4 // Why 4? 근데 여기서 printf("%zu\n", sizeof(a ? true : false)); // Why 4? 가 3을 반환한다.boolean「 」의 bool은 「」입니다.1(C) 그럼 왜는 ..

programing 2022.06.07

C에서는 어레이가 포인터입니까, 포인터로 사용됩니까?

C에서는 어레이가 포인터입니까, 포인터로 사용됩니까? 어레이는 단순히 일련의 값에 대한 지속적인 포인터일 뿐이며, C에서 어레이를 선언할 때는 포인터를 선언하고 포인터가 가리키는 시퀀스에 공간을 할당하는 것으로 알고 있습니다. 그런데 헷갈리네요.다음 코드: char y[20]; char *z = y; printf("y size is %lu\n", sizeof(y)); printf("y is %p\n", y); printf("z size is %lu\n", sizeof(z)); printf("z is %p\n", z); Apple GCC를 사용하여 컴파일하면 다음과 같은 결과가 나타납니다. y size is 20 y is 0x7fff5fbff930 z size is 8 z is 0x7fff5fbff930 ..

programing 2022.06.07

malloc은 얼라인먼트를 어떻게 이해하나요?

malloc은 얼라인먼트를 어떻게 이해하나요? 여기서 발췌한 다음에 pw = (widget *)malloc(sizeof(widget)); raw 스토리지를 할당합니다.실제로 malloc 호출은 유형 위젯 개체를 저장할 수 있을 만큼 충분히 크고 적절하게 정렬된 스토리지를 할당합니다. 허브 서터의 빠른 pimpl도 볼 수 있다고 그는 말했다. 얼라인먼트임의의 메모리 얼라인먼트new 또는 malloc을 통해 동적으로 할당되는 메모리는 모든 유형의 오브젝트에 대해 적절하게 정렬이 보장되지만 동적으로 할당되지 않은 버퍼에는 이러한 보장이 없습니다. 궁금한데, malloc은 커스텀 타입의 얼라인먼트를 어떻게 알 수 있을까요?정렬 요건은 재귀적입니다.임의의 위치 맞추기struct단순히 그 멤버 중 가장 큰 얼라인먼..

programing 2022.06.07

C의 시프트 연산자를 사용한 곱셈과 나눗셈이 실제로 더 빠릅니까?

C의 시프트 연산자를 사용한 곱셈과 나눗셈이 실제로 더 빠릅니까? 예를 들어 비트 연산자를 사용하여 곱셈과 나눗셈을 수행할 수 있습니다. i*2 = i>컴파일러는 코드 내에서 명시적으로 최적화하지 않는 한 안전한 최적화를 넘길 수 있습니다.그러나, 이러한 통찰을 얻을 수 없기 때문에, 리스크가 높고, 거의 도움이 되지 않습니다.또, 같은 코드로 작업하는 다른 프로그래머는, 취급할 데이터에 대한 비정상적인 기대를 걸고 있는 것을 알 수 없습니다.완전히 안전한 것처럼 보이는 변경은 당신의 "최적화"로 인해 역효과를 가져올 수 있습니다. 이 방법으로 곱하거나 나눌 수 없는 입력이 있습니까? 예... 위에서 설명한 바와 같이 음수는 비트 시프트로 "분할" 때 구현 정의된 동작을 가집니다.컴파일된 내 머신을 사용..

programing 2022.06.06
반응형