#include <stdio.h> int main() { int number; printf("Input a positive integer : "); scanf("%d", &number); if (number % 2 == 0) printf("Even"); return 0; } 강의 예제에서 숫자를 받아서 그 숫자가 짝수면 Even을 출력하는 예제를 만들었습니다. 숫자를 문자 'A'로 받으면 'A'는 65니까 당연히 아무것도 출력이 안될줄알았는데 왜 Even이 출력되는걸까요?
안녕하세요 수강생 입니다. 문의 사항이 있어 글 남깁니다. 다중 구조체에 대해 문의남깁니다. 예를들어 struct test { int a=0; int b=0; }TEST[2][2] *PTEST[2][2]; 이런 식 입니다. 이때, 구조체에 접근할 때 주소연산자가 아닌 대입으로 접근이 가능한데 왜 그런가요? 예를 들어.. PTEST[2][2]->a 는 접근이 안되고 TEST[2][2].a는 접근이 됩니다.
안녕하세요. const char* str = “Constant string”; // str is a modifiable lvalue. str = “Second string”; // “Constant string” = “Second String” // imposible str[0] = ‘A’; //Error char str2[] = “String in an array”; str2[0] = ‘A’; // OK 문자열 포인터 개념이 좀 어렵게 느껴지네요. str[0] = ‘A’; 은 왜 안되는 건가요? 만약 포인터를 이용해서 0번째 배열에 원소를 저장하고 싶으면 어떻게 해야 하나요?
CUDA 프로그래밍 (1) - C/C++/GPU 병렬 컴퓨팅 - CUDA 커널 kernel
- 출장이 잦아서, 답변에 시간이 좀 걸릴 수도 있습니다. 양해 바랍니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 선생님 좋은 강의 잘 듣고 있습니다. 강의 부분에 질문이 하나 있어 이렇게 남깁니다. kernel 을 launch한 이후에 cudaDeviceSynchronize() 를 call 해주는 이유가 kernel의 작업 완료를 보장하기 위함이라는 사실은 인지하고 있습니다. 그런데, 그 아래 부분에서 cudaMemcpy를 해주기 때문에 저 부분이 생략해도 되지 않나 싶어서 질문을 남깁니다. memcpy가 저번 강의 때, kernel 작업 완료 후에 이뤄진다고 말씀하셨던 부분이 있어서, cudaDeviceSynchronize() 을 이번 예제에서 빼도 상관 없지 않을까해서 질문드립니다. 좋은 강의 감사합니다.
안녕하세요! 다음 코드를 제 스스로 분석해봤는데, 정확한 분석이 맞는지 헷갈려서 질문드립니다. (1) Comma 연산자는 Assignment 연산자보다 서열이 낮은 것으로 알고 있습니다. 1번 예시에서 콤마가 작동하는 시기는 z에 x의 값이 대입되고, y에 값 2가 대입된 뒤인가요? 콤마 연산자는 왼쪽에서 오른쪽으로 계산을 하는데, 이미 대입연산자에 의해 각각 값이 대입된 변수 z와 y를 또 계산한다는 것이 잘 이해되지 않습니다. 이 경우의 콤마 연산자의 계산이란 무엇인지 알려주시면 감사하겠습니다. (2) 1번 예시와 2번 예시의 차이점은 무엇이 먼저 계산되느냐 일까요? 즉 1번 예시에서는 x에 1이 대입되고, 그 값이 다시 x에 대입된 뒤, y에 2가 대입되고, 콤마 연산자가 작동한다면, 2번 예시에서는 x에 1이 대입되고, y에 2가 대입된 뒤, x의 값이 z에 대입되고, 콤마 연산자가 작동하는 건가요? 늘 친절한 답변 감사합니다.
안녕하세요. 강의에서 일반문과 그것의 축약문의 어셈블리 비교를 통해 효율성을 체크했습니다. 그냥 보면 둘은 똑같아 보였는데, 자세히 보니 끝에서 두 자리가 다르더군요. 이건 제 단계에서 크게 신경쓰지 않아도 되는 것 같은데, 그래도 궁금해서 질문드립니다. 일반문과 축약문의 어셈블리가 완전 같지는 않은데, 저 정도는 효율성을 따지는데 있어 굳이 신경 쓰지 않아도 되는 건가요?
안녕하세요 선생님 꼼수관련 질문이 2개 있습니다. 1) 문제가 생긴 프로그램이 multi threading 때문에 context switching이 자주 일어나서 2시간만 지나면 고장나는 것인가요? 2) 이를 하나의 프로세스로 고정시키면 여전히 context switching 이 일어나더라도 cpu core가 완전히 바뀌는게 아니라 좀 더 손쉬운 context switch가 일어나서 부하가 덜간다... 이런 느낌으로 이해하면 맞을까요?
강의에서 GetString 도 free(...) 를 호출하고 = NULL; 을 호출하기에 WRITE 요소가 있어 동기화가 필요하다 얘기해주셨는데 그렇다면 정말 sprintf_s 로 버퍼를 복사해오는 읽기만 있다면 GetString 함수를 동기화할 필요가 없나요? 두 Worker Thread에서 free(...) 를 호출한 이후에 Main Thread 에서 그 값을 버퍼로 복사해오는 읽기 작업을 한다면 제대로된 문자열을 복사해오지 않을 수 있을 것 문제가 발생할 수 있어보여서여 A Thread는 WRITE / B Thread는 READ 만 했을 때 READ함수에는 동기화를 하지 않아도 되는지 궁금합니다.
안녕하세요. 관계 연산자 3번 예시를 공부하다 문자를 입력받으면 무한루프에 빠지는 정확한 이유가 뭔지 궁금해서 질문드립니다. 변수 guess는 double type이기 때문에 문자를 받을 수 없는 것은 이해했습니다. 그런데 왜 문자를 넣으면 무한루프에 빠지는지 모르겠습니다. 디버깅을 해보니 guess는 처음 입력된 '3'이 계속 저장돼 있는데, 이것과 관련이 있는 걸까요?
안녕하세요. 5-11 형변환을 공부하다가 궁금한 점이 생겨 질문드립니다. 13행에서 변수 i에, 강제로 float로 변환된 표현식 'f + 2 * c;'의 값이 저장되는 것으로 이해했습니다. cpu는 다른 자료형들을 연산할 수 없기 때문에 컴파일러가 표현식의 자료형을 동일하게 변환시키는 것은 이해됩니다. 그런데 변할 때 피연산자들 중 상대적으로 더 큰 자료형을 갖는 피연산자에 맞춰 변환되는 것인가요? 즉 13행의 경우는 실수 자료형을 갖는 변수 f가 정수인 '2 * c' 보다 더 큰 자료형이기 때문에 두 피연산자를 더한 값의 자료형이 float가 되는 것인가요? 늘 좋은 답변 감사합니다.
안녕하세요. 연산자의 우선순위에 대해 설명하실 때 강의에서 말하는 ()는 operator가 아니라 primary expression이라고 하셨습니다. 강의의 ()는 operator가 아닌데, 어떻게 연산자 우선순위를 설명할 때 포함될 수 있는지 모르겠습니다. 늘 좋은 강의, 답변 감사합니다.
안녕하세요 선생님 질문이 있습니다. 제가 자바의 intellij에 익숙해서 선생님이 하신것 처럼 _ SECURITY_ ATTRIBUTES#lpSecurityDescriptor 다음에 SECURITY _DESCRIPTOR 로 넘어가시는데 1번째 구조체에서 뭘 참조해서 넘어가신것인가요? 1번째 구조체는 CreateProcess를 타고 들어가서 찾을 수 있었는데 2번째 구조체는 ctrl+shift+f로 밖에 못찾겠습니다. 어떻게 연결되는것인가요? 아니면 연결이 안되고 그냥 별도의 구조체로 존재한다 봐야하나요?
안녕하세요 강사님. 좋은 강의 감사합니다. 강의 잘 보고 있습니다. 질문이 있는데요. 32비트던 64비트던 똑같이 스택 메모리에 쓰레기 값?이 있는 것이 이해가 안되서 질문 드립니다. 0x00000008F9AFF924 03 00 00 00 cc cc cc cc 0x00000008F9AFF92C cc cc cc cc cc cc cc cc 0x00000008F9AFF934 cc cc cc cc cc cc cc cc 0x00000008F9AFF93C cc cc cc cc cc cc cc cc 0x00000008F9AFF944 04 00 00 00 cc cc cc cc 0x00000008F9AFF94C cc cc cc cc cc cc cc cc 0x00000008F9AFF954 cc cc cc cc cc cc cc cc 0x00000008F9AFF95C cc cc cc cc cc cc cc cc 0x00000008F9AFF964 cc cc cc cc 10 00 00 00 0x00000008F9AFF96C 20 00 00 00 30 00 00 00 0x00000008F9AFF974 40 00 00 00 50 00 00 00 진하게 표시한 것이 변수 값입니다. 여기서 이해가 안되는 것이 int a = 3, int b = 4;를 실행하면 스택 메모리에 아래처럼 저장되는게 아니라 위처럼 띄엄 띄엄 저장되나요? 0x00000008F9AFF924 03 00 00 00 04 00 00 00
강의 시간 6:20부터 #define ROWS 3 #define COLS 4 int sum2d_1(int ar[ROWS][COLS]); "ROWS를 넣어주더라도 내부적으로는 사용할 수 없고, 이 정보는 정의하는 함수로 전달이 안된다. 근데 배열을 선언할때 symbolic constant를 사용하는 경우가 대부분 그래서 이걸(ROWS) 이용해서 밑에서 접근할 수 있다." 여기서 밑에서 접근할 수 있다는 말이 int main() { int data[ROWS][COLS] = { {1,2,3,4}, {5,6,7,8}, {9,0,1,2} }; printf("%d\n", sum2d_1(data)); return 0; } int sum2d_1(int ar[ROWS][COLS]) { int r, c, tot = 0; for (r = 0; r < ROWS; r++) for (c = 0; c < COLS; c++) tot += ar[r][c]; return tot; } for문에 있는 ROWS가 위에서 define으로 이미 정의되어 있기 때문에 사용할 수 있다는 말인가요??
안녕하세요. 강의를 몽땅.. 다 담아서 열심히 수강하고 있는 한 학생입니다.^^ 학습한 내용을 제대로 이해했는지 확인 하고 싶어 질문 남깁니다. OS도 결국 명령어와 데이터의 조합으로 이루어진 이진수 binary 파일인 프로그램에 불과하며 disk에 저장되어 부팅 시 부트 로더에 의해 RAM으로 LOAD 되는 것이며, 이 때 커널은 항상 고정 크기를 가지며 파편화가 되지 않습니다.(메모리 가상화를 OS가 해주므로) 즉, 커널은 연속된 메모리 공간에 쌓입니다. 프로세스들은 이 커널 영역을 공유 사용하며, 저장된 가상 메모리 테이블 등에 의해 맵핑 되구 syscall을 할 수 있습니다. 또한 VMWare 등의 프로그램을 통해 가상 머신을 돌릴 때도 커널은 고정 크기를 가집니다. VM에서 실행할 때, RAM 용량 설정, Thread 갯수 설정 등의 옵션이 있는데 4코어 8GB 환경이라면 VM에 2코어 4GB를 지정해주면 이를 딱 조절해서 HOST와 Virtual OS는 자원을 반 씩 나눠 쓰는 개념이기 때문이고, 가상 OS 상에서의 프로세스들은 Virtual OS에 의해 가상 메모리를 관리 받습니다. 검색과 고민 끝에 이렇게 이해를 했는데 잘 한 것이 맞는지, 잘못된 부분이나 조언해주실 것이 있다면 부탁드리겠습니다.^^ 항상 잘 듣고 있습니다. 감사합니다.