C 113

realloc은 실제로 배경에서 어떻게 작동합니까?

realloc은 실제로 배경에서 어떻게 작동합니까? 어떻게.realloc실제로 백그라운드에서 일을 합니까?이전 위치에 사용 가능한 메모리가 충분하지 않은 경우 메모리 블록을 두 개/여러 개 할당하고 그와 다른 것을 가리키는 포인터 한 개가 내부적으로 서로 연결되어 있습니까? 아니면 메모리가 충분하고 포인터가 새 주소로 업데이트되고 이전 메모리가 삭제되는 이전 영역에 복사됩니까? 그리고 그것은realloc컴파일러/OS가 종속적입니까 아니면 독립적입니까?realloc힙 뒤에 충분한 메모리를 사용할 수 있는 경우 사용 가능한 메모리 범위를 확장하려고 시도합니다.그렇지 않다면 다음과 같습니다.malloc새 사이즈의 블록이 있습니다.memcpy거기에 있는 당신의 컨텐츠들,free낡은 블록이것은 OS와 컴파일러 둘..

programing 2023.11.06

가장 짧은 C 프로그램은 여전히 segfault를 유발합니다.

가장 짧은 C 프로그램은 여전히 segfault를 유발합니다. 잠시 동안 저는 아마도 저의 첫번째 C 버그가 없는 프로그램을 쓴 것이 매우 자랑스러웠습니다.전체 소스 코드는 다음과 같습니다. int main; 그것은 그것이 없어도 완벽하게 컴파일합니다.int, 그러나 경고가 발령됩니다(없는 경우에도).-Wall) 그리고 버그가 없는 프로그램을 목표로 하는 프로그래머로서 오류로 취급합니다. 이 애플리케이션을 즐겁게 작성한 후, 저는 바로 그것을 출시하기 위해 달려갔습니다.놀랍게도 세그멘테이션 오류가 나타났어요... 이제 진짜.정확히 무슨 일이 일어나고 있는 거지? 제 추측으로는 다음과 같습니다. 부족한 부분입니다.main의 정의.이건 너무 뻔한데도 컴파일러가 허락해주잖아요main다른 단위로 정의될 수 있습..

programing 2023.11.06

C의 문자열을 빈 문자열로 초기화

C의 문자열을 빈 문자열로 초기화 C의 문자열을 빈 문자열로 초기화하고 싶습니다.노력했습니다. string[0] = ""; 근데 써있더라고요. "warning: assignment makes integer from pointer without a cast" 그럼 어떻게 하면 될까요?Will Dean 버전 외에도 전체 버퍼 초기화에 대해 다음이 일반적입니다. char s[10] = {'\0'}; 아니면 char s[10]; memset(s, '\0', sizeof(s)); 아니면 char s[10]; strncpy(s, "", sizeof(s)); 문자열의 첫 번째 문자를 0으로 설정하려면 다음과 같이 하십시오. char myString[10]; myString[0] = '\0'; (또는myString[0..

programing 2023.11.06

임베디드 시스템에서의 malloc 동작

임베디드 시스템에서의 malloc 동작 저는 현재 임베디드 프로젝트(STM32F103RB, cooCox CoIDE v.1.7.6 with arm-none-eabi-gcc 4.8 2013q4)를 진행하고 있으며, 그 방법을 이해하려고 합니다.malloc()꾸밈없이 굴다CRAM이 가득 찼을 때. 제 STM32는 20kB = 0x5000Bytes의 RAM을 가지고 있으며, 스택에는 0x200이 사용됩니다. #include #include "stm32f10x.h" struct list_el { char weight[1024]; }; typedef struct list_el item; int main(void) { item * curr; // allocate until RAM is full do { curr = ..

programing 2023.11.01

FLT_MIN이 0인 이유는 무엇입니까?

FLT_MIN이 0인 이유는 무엇입니까? limits.hfloating이 아닌 점 산술 유형에 대한 한계를 지정합니다.INT_MIN그리고.INT_MAX. 이 값들은 int를 사용하여 나타낼 수 있는 가장 음의 값이자 가장 양의 값입니다. 인float.h, 에 대한 정의가 있습니다.FLT_MIN그리고.FLT_MAX. 다음을 수행하는 경우: NSLog(@"%f %f", FLT_MIN, FLT_MAX); 다음과 같은 출력을 얻을 수 있습니다. FLT_MIN = 0.000000, FLT_MAX = 340282346638528859811704183484516925440.000000 FLT_MAX당신이 예상하는 것처럼, 정말 큰 숫자와 같지만, 왜?FLT_MIN정말 큰 음수 대신에 0과 같습니까?실제로는 0은 아니..

programing 2023.11.01

c에서 시간 지연을 실행합니다.

c에서 시간 지연을 실행합니다. 이 검색어를 정확히 어떻게 써야 할지 모르겠습니다.그래서 운 좋게도 아무것도 못 찾았는데요.. :S 저는 C에서 시간 지연을 시행해야 합니다. 예를 들어, 나는 무언가를 하고싶습니다. 그리고 나서 1분만 기다리라고 말하고 나서 계속합니다. 그게 말이 됩니까?누가 도와줄 수 있습니까? C(C99)를 할 수 .time()이를 위해서는 다음과 같은 것이 있습니다. #include : void waitFor (unsigned int secs) { unsigned int retTime = time(0) + secs; // Get finishing time. while (time(0) < retTime); // Loop until it arrives. } 그건 그렇고, 이 가정은ti..

programing 2023.10.27

C에서 주(공)와 주()의 차이

C에서 주(공)와 주()의 차이 이 질문에는 이미 다음과 같은 답변이 있습니다. C와 C++에서 main()이 반환되는 것은 무엇입니까? (19개 답변) 닫힘8년 전에. 누가 나에게 그들 사이의 차이점을 말해줄 수 있습니까?int main()그리고.int main(void)? 두 가지 모두 작동하는 이유 및 기본 인수는 무엇입니까?int main()?보통 상황에서는 차이가 없습니다.인수가 전혀 없으므로 '기본 인수에서 main()'이 아닙니다. 이상한 상황은 이렇습니다.메인에 직접 전화를 걸면,()당신이 원하는 어떤 파라미터라도 전달할 수 있게 해 줄 겁니다(void)아무 것도 넘기지 못하게 할 겁니다 그러나 99.가 되지 이 하기 위해 됩니다.그러나 99.99999999%의 경우에는 이 중 어떤 것도 ..

programing 2023.10.22

캐리지 리턴 인 C?

캐리지 리턴 인 C? 다음 프로그램의 출력은 다음과 같습니다.hai 저는 어떻게 그가\r캐리지 리턴은 이 프로그램에서 작동하고 실제로 누가 나를 도와줄 수 있습니까? #include #include void main() { printf("\nab"); printf("\bsi"); printf("\rha"); _getch(); } 5.2.2/2 (문자 표시 의미론) 부터: \b (backspace) 현재 선의 이전 위치로 활성 위치를 이동합니다.활성 위치가 선의 초기 위치에 있으면 디스플레이 장치의 동작이 지정되지 않습니다. \n (새 라인) 활성화 위치를 다음 라인의 초기 위치로 이동합니다. \r (Carriage Return) 현재 선의 초기 위치로 활성 위치를 이동합니다. 여기서 코드는 다음을 생성합..

programing 2023.10.17

memcpy 대 C의 할당

memcpy 대 C의 할당 어떤 상황에서 memcpys가 최신 인텔/AMD 하드웨어에서 할당된 작업을 능가할 것으로 예상해야 합니까?저는 32비트 인텔 플랫폼에서 GCC 4.2.x를 사용하고 있습니다(하지만 64비트에도 관심이 있습니다).그들이 과제를 능가할 것이라고 기대해서는 절대 안 됩니다.그 이유는 컴파일러가memcpy(최적화 플래그를 사용하는 경우) 어쨌든 더 빠를 것으로 생각될 때.그렇지 않고 구조가 레지스터에 들어갈 정도로 상당히 작다면 메모리 액세스가 전혀 필요 없는 직접 레지스터 조작을 사용할 수 있습니다. GCC는 내부적으로 레지스터/메모리 셀을 직접 변경할 때 또는 사용할 때를 결정하는 특별한 블록 이동 패턴을 가지고 있습니다.memcpy기능.구조를 할당할 때 컴파일러는 컴파일 시에 이..

programing 2023.10.17