반응형

C 33

gcc의 -m32 옵션은 언제 사용해야 합니까?

gcc의 -m32 옵션은 언제 사용해야 합니까? 저는 추가하지 않고 Suse 10 32비트 시스템으로 컴파일하면 프로그램을 작성하고 있습니다.-m32옵션을 선택하고 Suse 10 64비트에서 실행하면 잘 작동합니다. 이 경우, 제가 추가할 필요가 없는 것입니까?-m32옵션? 32비트 시스템에 구축된 프로그램을 부작용 없이 64비트 시스템에서 직접 실행할 수 있습니까?아니면 필요한 업데이트나 변경 사항이 있습니까?64비트 OS에서 32비트 실행 파일을 실행하는 데 문제가 없습니다(32비트 동적 라이브러리가 있는 한). -m32는 기본적으로 64비트 객체를 컴파일하도록 구성된 컴파일러에서 32비트 객체를 컴파일하기 위해 존재합니다.OS가 32비트 및 64비트 프로그램을 모두 지원하는 한(힌트: OpenB와 ..

programing 2023.09.19

One malloc 문을 사용하여 2-D 배열을 할당하는 방법

One malloc 문을 사용하여 2-D 배열을 할당하는 방법 저는 인터뷰에서 2-D 배열을 어떻게 할당하는지 질문을 받았고, 아래가 제 해결책이었습니다. #include int **array; array = malloc(nrows * sizeof(int *)); for(i = 0; i < nrows; i++) { array[i] = malloc(ncolumns * sizeof(int)); if(array[i] == NULL) { fprintf(stderr, "out of memory\n"); exit or return } } 나는 내가 잘했다고 생각했는데 그는 나에게 그것을 사용해서 하라고 했습니다.malloc()두개가 아닌 진술.저는 그것을 어떻게 달성해야 할지 전혀 모르겠습니다. 혼자 할 수 있는 ..

programing 2023.09.19

메인으로 쓰는 게 어때요?

메인으로 쓰는 게 어때요? 사람들이 사용합니다.void main() /*empty parens ()*/ 는 를 .void main(void) 뭐가 다른지 알아요?요즘 표준이 무엇인지 잘 모르겠지만, 전통적인 ANSIC에서는 빈 괄호를 사용하면 함수가 임의의 수의 인수를 취할 수 있음을 나타냅니다.선언하기void반면에 parameter는 함수가 0개의 인수만 사용한다는 것을 나타냅니다.이 경우(그리고 다른 많은 경우), 그것은 크게 중요하지 않습니다. 하지만 엄격하게 하고 싶다면, 아마도 다음과 같은 것을 정의하는 것이 최선일 것입니다.void매개 변수. 그럼요.main다로 정의될 .int main(int argc, const char* argv[])한 경우가 -하지만,합니다.C99 표준부터: 5.1.2...

programing 2023.09.19

공유 메모리를 사용하여 프로세스 간 세마포어를 공유하는 방법

공유 메모리를 사용하여 프로세스 간 세마포어를 공유하는 방법 하나의 서버에 N개의 클라이언트 프로세스를 동기화해야 합니다.이 과정들은 제가 3개의 세마포어를 선언했던 주요 함수에 의해 분기됩니다.POSIX semaphore를 사용하기로 했는데 이 과정들을 어떻게 공유해야 할지 모르겠습니다.공유 메모리가 올바르게 작동해야 한다고 생각했는데 몇 가지 질문이 있습니다. 세그먼트에 적절한 메모리 공간을 할당하려면 어떻게 해야 합니까? 사용해도 됩니까?sizeof(sem_t)인에size_t들녘의shmget내가 필요한 공간을 정확히 할당하기 위해서? 이 상황과 비슷한 예를 가진 사람이 있습니까? 이름을 공유하기 쉽습니다.POSIX세마포어 세마포어 이름 선택 #define SNAME "/mysem" 사용하다sem_o..

programing 2023.09.14

컴파일러가 reloc을 최적화하는 것이 허용됩니까?

컴파일러가 reloc을 최적화하는 것이 허용됩니까? 불필요한 전화를 걸면 도움이 되는 상황을 발견했습니다.realloc최적화되어 있습니다.그러나 Clang과 GCC 중 어느 쪽도 그런 일을 하지 않는 것 같습니다(Compiler Explorer(godbolt.org ) - 여러 번 통화하면서 최적화가 이루어지고 있는 것을 볼 수는 있습니다.malloc. 예: void *myfunc() { void *data; data = malloc(100); data = realloc(data, 200); return data; } 다음과 같은 것에 최적화될 것으로 예상했습니다. void *myfunc() { return malloc(200); } 왜 Clang도 GCC도 그것을 최적화하지 않는 것일까요? - 그들은 ..

programing 2023.09.09

스핀 잠금 구현이 올바르고 최적입니까?

스핀 잠금 구현이 올바르고 최적입니까? 저는 아주 작은 중요한 부분을 보호하기 위해 스핀락을 사용하고 있습니다.경합은 매우 드물게 발생하므로 일반 뮤텍스보다 스핀 잠금이 더 적합합니다. 현재 코드는 다음과 같고 x86 및 GCC를 가정합니다. volatile int exclusion = 0; void lock() { while (__sync_lock_test_and_set(&exclusion, 1)) { // Do nothing. This GCC builtin instruction // ensures memory barrier. } } void unlock() { __sync_synchronize(); // Memory barrier. exclusion = 0; } 그래서 궁금한게 있어요. 이 코드가 맞..

programing 2023.09.04

__read_macro, __init, __macro에 대한 좋은 설명

__read_macro, __init, __macro에 대한 좋은 설명 의 __read_mostly: #define __read_mostly __attribute__((__section__(".data..read_mostly")) 은 이는거의 입니다.cache.h __init: #define __init __section(.init.text) __cold notrace init.h __exit: #define __exit __section(.exit.text) __exitused __cold notrace 인터넷을 통해 검색한 후에 나는 그곳에서 무슨 일이 일어나고 있는지에 대한 좋은 설명을 찾지 못했습니다. 추가 질문: 커널 개발에 사용되는 다양한 "링커 매직"에 대해 들어본 적이 있습니다.이와 관련된..

programing 2023.08.30

스택의 로컬 변수 할당 순서

스택의 로컬 변수 할당 순서 다음 두 가지 기능을 살펴봅니다. void function1() { int x; int y; int z; int *ret; } void function2() { char buffer1[4]; char buffer2[4]; char buffer3[4]; int *ret; } 만약에 내가 부러지면function1()gdb변수의 주소를 인쇄하면 다음과 같은 정보를 얻을 수 있습니다. (gdb) p &x $1 = (int *) 0xbffff380 (gdb) p &y $2 = (int *) 0xbffff384 (gdb) p &z $3 = (int *) 0xbffff388 (gdb) p &ret $4 = (int **) 0xbffff38c 만약에 내가 같은 일을 한다면,function2..

programing 2023.08.30

열려 있는 파일 구조에서 파일 핸들을 가져오려면 어떻게 해야 합니까?

열려 있는 파일 구조에서 파일 핸들을 가져오려면 어떻게 해야 합니까? 그fopen함수는 포인터를 반환합니다.FILE내용이나 의미를 다루지 않고 불투명한 값으로 간주해야 하는 구조입니다. Windows에서 C 런타임은 Windows API의 래퍼입니다.fopen기능은 다음에 의존합니다.CreateFile기능. 그.CreateFile함수는 a를 반환합니다.HANDLE다른 윈도우즈 API에서 사용하는 파일입니다. 이제, 나는 윈도우 API를 사용하는 라이브러리의 깊숙한 곳에서fopen그리고.FILE*그래서: 그것을 얻을 수 있는 방법이 있습니까?HANDLE에서FILE구조?컴파일러마다 다르므로 MSVC 런타임 라이브러리를 의미합니다. 저는 이것이 못생긴 휴대용 해킹이 될 것이고, 만약 마이크로소프트가 내부 포맷..

programing 2023.08.30

소켓 listen() backlog 매개 변수의 값을 결정하는 방법은 무엇입니까?

소켓 listen() backlog 매개 변수의 값을 결정하는 방법은 무엇입니까? 수신 소켓의 백로그 매개 변수에 사용할 항목을 결정하려면 어떻게 해야 합니까?단순히 매우 큰 숫자를 지정하는 것이 문제입니까?Winsock 프로그래머의 FAQ에는 이에 대한 매우 긴 답변이 있습니다.표준 설정과 NT 4.0 핫픽스에 추가된 동적 백로그 기능에 대해 자세히 설명합니다.짧은 대기열을 사용해야 하는 특별한 이유가 없는 한 SOMAXCONN을 사용합니다. 대기열에 새 연결을 위한 공간이 없으면 RST가 전송되지 않으므로 클라이언트는 SYN을 재전송하여 자동으로 연결을 계속 시도할 수 있습니다. 또한 backlog 인수는 다른 소켓 구현에서 다른 의미를 가질 수 있습니다. 대부분은 반쯤 열린 연결 대기열의 크기를 의..

programing 2023.08.20
반응형