c21 [C언어]함수 호출을 통한 스택 메모리 이해[1](by 어셈블리어) 이번 글에서는 간단한 함수 호출을 하는 코드를 어셈블리어로 보면서 스택메모리가 실제로 어떻게 변수를 쌓아가는지를 배우겠습니다. 이번글에 들어가기 전에 먼저 알아야 될 용어들은 EBP (Extended Base Pointer), ESP (Extened Stack Pointer) 스택프레임입니다. EBP, ESP, 스택프레임이란? EBP (Extended Base Pointer)는 현재 스택프레임의 첫 주소입니다. EBP (Extended Stack Pointer)는 영어를 보시다시피 현재 스택이 어디까지 채워져 있는지 보여주는 포인터입니다. 스택프레임 (Stack Frame)은 각 함수가 사용하는 스택 메모리 범위입니다. 스택 프레임은 보통 ebp, esp사이의 범위입니다.(하지만 esp는 움직이는 포인터.. 2023. 2. 21. [C언어] 백준 1152번 단어의 개수 문제 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다. 입력 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다. 출력 첫째 줄에 단어의 개수를 출력한다. 생각, 풀이 과정 문자열 길이가 1,000,000을 넘지 않는다고 하니 마지막에 널 문자 ('\0')가 들어갈 것까지 생각을 해서 char 배열은 1,000,001로 잡아준다. 문자열을 입력을 받고 공백이 나올 때마다 coun.. 2023. 2. 20. [C언어] 백준 1000 번 A+B 문제 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 A와 B가 주어진다. (0 입력 값이 1과 9 사이니까 int(4바이트)도 괜찮지만 메모리를 효율적으로 하려면 char(1바이트)로 해도 되지않을까? 정수를 입력 받는 함수 scanf()를 한 문장에 두 정수를 받을 수 있게 scanf( %d %d ...) 이런 형식으로 작성하여 두 정수를 입력 받아서 두 변수에 대입한다. char형 result 변수를 만들어서 두 정수 A + B 를 대입한다. printf() 함수로 result 값을 출력한다. 코드 #inclu.. 2023. 2. 20. [C언어]강제 형변환 C언어 강제 형변환 문제 ( 이 코드의 실행결과는 어떻게 나올까요?) #include #include int main(void) { /* int abs(int n); abs함수는 절댓값을 알려주는 함수 */ printf("%d %d\n", abs(4.48), abs(-5.58)); return 0; } 이 문제에서 함수에 정수가 들어가야 되는데 실수가 들어가면 어떻게 되지? 에라 모르겠다 4, -5 나오겠지 라고 생각했다면 이 글을 제대로 읽어보시길 바란다. 답은 맨 아래에 있음! 강제 형변환 이전 글에서 암시적 형변환에 대해서 알아 봤는데, 이번에는 강제 형변환에 대해서 알아보자. 강제 형변환은 영어로 Explicit Conversion 이라고하고 개발자가 직접적으로 형(Type)을 강제로 변환시키는 .. 2023. 2. 17. 이전 1 2 3 4 5 6 다음