계속 그리면서 이해하다가 딜레마에 빠져 질문드립니다 .. 새 노드 추가할때의 그림을 그려보며 이해중이였는데, else { pNewNode->pNext = g_pHeadNode; g_pHeadNode = pNewNode; } 이 코드는 이미 헤드노드가 가리키는 '원래노드'가 따로 있는건데 그렇다면 pNewNode의 pNext엔 헤드노드 주소값을 넣으면 pNewNode는 AddNewNode에서 초기화된 각자의 멤버값을 가지면서 pNext를 따라가면 헤드노드가 나오게 되고, 그 헤드노드의 pNext를 따라가면 '원래노드'가 나오게 되는데 그 상태로 g_pHeadNode = pNewNode; 를 수행하게 되면 헤드노드에 pNewNode값이 오버라이트되게 되는건데 그럼 이 상황에선 기존헤드노드에 뉴노드멤버들의 값들과 pNext엔 헤드노드의 주소값, 이걸 따라가면 뉴노드멤버들의 값들과 pNext엔 헤드노드가 가리켰던 '원래노드'의 주소값, 이걸 따라가면 '원래노드'멤버들의 값과 pNext값 . . . 이렇게 생각하면 되는건가요 ? 그럼 결국엔 이 상황에선 g_pHeadNode와 pNewNode는 pNext를 제외한 모든 멤버변수들이 같은값을 가지고 있는 상황인거라고 해석하면 되는건가요 ? ( 뭔가 3개의 노드가 다 다른 멤버변수값을 가져야할것만 같은데, 2개의 노드가 같은 멤버변수값을 가지는거같아 이상하여 이해한게 맞나, 아니면 개념을 잘못잡은건가 싶어 질문드립니다 ) 질문이 길어져 죄송합니다 . . .
2 ^ 64 = 16 엑사바이트 (EB)로 나오는데 32비트 운영체제와 비교했을 때 크기가 너무 차이가 나서 어색합니다.. 찾아보니 전부다 사용하는 게 아니라 일정 부분만 사용한다고 하는데 64 비트 운영체제의 가상메모리 크기와, 유저모드, 커널모드 크기가 어떻게 되는지 알 수 있을까요
Overlapped IO에서 SleepEX 같은 함수로 Alertable Wait상태로 진입할 수 있잖아요? IOCP 같은 경우 GetQueuedCompletionStatus 상태로 콜백함수를 호출할 수 있는 환경을 만들어주면 그 상태도 Alertable Wait 상태라고 할 수 있을까요?
nData 의 공간에 10 이라는 값이 리틀 엔디언 방식으로 담기고 pnData 의 공간에 nData의 64비트 주소가 리틀 엔디언 방식으로 담겨야한다고 이해했습니다. 혼자서 실습을 해보는데 pnData 에 10이 담겨있고 nData에 마우스 커서를 가져다 대봤으나 주소가 뜨지 않습니다. 무엇이 문제일까요
안녕하세요, 강의 항상 잘 듣고 있습니다. FILE* fp = NULL; fopen_s(&fp, "Test.txt", "w'); if ( fp == NULL ) { puts("ERROR: Failed to open file") } Q1. 파일 생성, 개방, 폐쇄 강의에서 위 코드를 설명해주실 때 fp가 fopen_s가 할당하는 '무언가'의 주소를 담고 있다고 말씀하셨는데, 무언가는 파일 입출력은 위한 힙 메모리영역이 할당되는것인지 아니라면 무엇이 할당되는 것인지 궁금합니다. Q2. fp의 주소는 NULL 값으로 초기화 되었는데, fopen_s()함수에 의해 fp가 "Test.txt" 파일이 위치한 곳의 주소를 담게되는 것인지 궁금합니다. Q3. fopen_s(&fp, "Test.txt", "r') ; 로 코드를 바꾸어 실행시 해당 파일이 없는 경우엔 fp값이 여전히 NULL 이고 따라서 if문의 에러메시지가 출력되는게 맞을까요? 질문이 많아서 죄송합니다;;
강의 내용에 보면, char szBuffer[8] 통해 8바이트 자동 할당되었는데, \0이 마지막에 붙어 1바이트 초과하여 ndata 스택 메모리를 침범한다는 말씀을 하셨습니다. 그렇다면, 문자열을 N 만큼 입력받고 싶다면 항상 N+1의 메모리 공간을 할당해야할까요? 스택, 힙 두 경우에 모두 해당되는지 궁금합니다.
#include <stdio.h> int main(void) { int nInput = 0; int answer = 0; scanf_s("%d", &nInput); answer = (nInput >= 80) ? printf("pass") : printf("fail"); printf("%c\n", answer); return 0; } 이 코드가 왜 실행되는지 모르겠어요 문자열 %s가 아니라 왜 %c로 했는데 되는지 궁금해요 %s로 해도 실행은 되는데 이렇게 초록색 줄로 그이고 실행 했을 때 처리 속도도 느린데 왜 그런건가요? answer에 printf 함수가 들어가면 어떻게 되는 건가요? 나중에 이런것도 설명 해주시나요?
Visul Studio 로 x86 이든 x64든 한번 컴파일을 해서 Intel CPU 와 AMD CPU 에서 동일하게 실행이 가능하다면 Intel 과 AMD 의 명령어세트가 동일하고 제공하는 레지스터들이 동일한 것인지 갑자기 궁금증이 들어 질문 남깁니다! 좋은 강의 감사드립니다!
안녕하세요, 저는 이 강의에서 버블정렬이라는 단어를 듣기전까지 버블정렬이 뭔지도 몰랐습니다. 그래서 인터넷에서 버블정렬을 검색 후 (답안지는 보지 않았습니다.) 이미지 한장을 보고 어떤 방식으로 진행하는지만 보고 제 스스로 구현을 해봤습니다. 총 두가지 방법으로 구현을 해봤는데요 첫번째 방법은 선생님의 설명을 듣기 전 문제만 보고 스스로 해봤고 두번째 방법은 선생님의 버블정렬 개념 설명을 듣고 설명의 방식대로 구현을 해봤습니다. 첫번째 방법 두번째 방법 두가지 방법 모두 버블정렬 개념에 맞게 작성 된 로직인지 체크 해주시면 감사하겠습니다!
안녕하세요, 제가 이해한바가 맞는지 확인하고 싶습니다. 기본적으로 H/W장치가 있고 그 장치를 컴퓨터에 연결을 하면 S/W Kernel단에 해당 장치의 대한 디바이스 드라이버가 있고 S/W Kernel단 OS에 해당 디바이스 드라이버를 처리하기 위한? 대응이 되는 요소가 있고 OS는 해당 장치를 추상화한 File이라는 걸 User단에 만들어준다. 해당 File에는 Buffer라는 개념이 존재한다. User단에서 해당 장치를 사용하기 위해선 OS가 만든 장치를 추상화한 File을 사용하는 프로그램을 만들어서 사용해야 한다. 이걸로 프로세서와 장치는 RWX를 할 수 있는 조건이 갖춰진다. 그리고 같은 H/W단에 있는 CPU와 장치는 Interrupt라는 걸로 통신(제어)하게 된다. 컴퓨터 외에 H/W장치는 크게 두가지로 볼 수 있다. 입력 장치와 출력 장치가 있다. 입력 장치는 마우스, 키보드, 캠, 마이크 등이 있고 / 출력 장치는 모니터, 스피커 등이 있다. 입력 장치들은 데이터들을 추상화한 File Buffer로 전송하고 이 데이터들을 (Read)사용하기 위해선 해당 File의 대한 프로그램을 개발해야한다. 출력 장치들은 출력 장치를 추상화한 File을 사용하는 프로그램을 개발한 다음 Read프로그램의 데이터들을 가져와서 가공을 한 다음 write(쓰기)를 하면 File Buffer에 데이터들이 차곡차곡 쌓은다음 출력 장치로 가게 되어서 해당 데이터들을 출력 장치를 통해 볼 수 있게 되는 것이다. 이것이 강의에서 나온 키보드로 Hello World 같은 프로그램 만들고 -> 모니터 콘솔화면으로 결과물을 볼 수 있는 구조다. 라고 이해했는데 이해한바가 맞을까요? 또 Buffer라는 것도 입력 or 출력장치로 R/W을 했을 때 데이터들을 차곡차곡 모아서 한번에 전송하기 위함인가요? 예를 들어 숙소A, 버스B, 건설현장C가 있을 때 버스B가 숙소A로부터 노동자들을 건설현장C로 수송해야할 때 노동자들을 한명씩 태워서 수송하면 오래걸리지만 버스B의 상한선까지 노동자들을 가득 태워 한번에 수송하면 노동자들을 금방 보낼 수 있는 것 처럼 Buffer라는 것도 OS가 H/W입출력 장치로 부터 데이터들을 효율적으로 처리하기 위한 기법 중 하나다. 즉 OS에서 데이터들을 효과적으로 처리하기 위한 데이터 처리기법으로 Buffer라는걸 만들었다. 고 이해했는데 이해한 개념이 맞을까요?