c
-
메모리 정렬, 패딩 그리고 비트필드(feat. 구조체)개발/C·C++ 2024. 7. 7. 10:37
컴퓨터는 극한의 효율을 추구해야 한다. 경쟁에서 우위를 점해야 하기도 하고 엔지니어 관점에도 같은 전기를 쓰면서 최대 성능과 최대 효율을 뽑는 것이 중요한 문제일 수밖에 없다. 메모리 정렬에 몇 가지 규칙이 존재한다.1. 데이터가 저장되는 메모리 경계가 존재한다2. 1 바이트 데이터는 1 바이트 경계, 4 바이트 데이터는 4 바이트 경계3. 여기서 말하는 경계는 4바이트 데이터가 저장되는 시작 주소가 4의 배수인 것을 말한다4. 예를 들어 배열이 아닌 int형 데이터는 0x00000040(편의상 32비트 주소 체계 기준)에 저장된다 메모리 정렬을 이야기할 때 데이터를 모아놓은 구조체가 자주 등장한다.다음의 두 구조체는 자료형의 총합은 같지만 실제 메모리 공간에서 차지하는 크기가 다르다.// 정렬되지 않은..
-
문자열 파싱 연습하기(feat. strtok_s)개발/C·C++ 2024. 7. 4. 16:39
C 표준 함수인 strtok_s는 원본 배열에 건드리기 때문에 const char*을 인수로 받지 않는다. 구분자는 하나의 문자열에 넣어주면 되고 내부 상태값을 유지하기 위해 외부에서 선언한 포인터 변수의 주소를 전달하면 된다. 여기서 말하는 내부 상태 값은 원본 문자열을 검색할 때 다음의 시작 주소다. strtok_s과 동일한 로직을 가지고 사용법도 동일한 MyStrTok을 구현해보자. #include char* MyStrTok(char* string, const char* delimeter, char** context);bool IsDelimiter(char ch, const char* delimiter);int main() { char buffer_string[64] = { "data = x + y..
-
객체 지향 개론개발/C·C++ 2021. 4. 21. 12:39
C는 절차지향, C++은 객체 지향이라고 하는데 완전히 맞는 말은 아닌 것 같습니다. C++/Java/JavaScript 등을 객체 지향 언어로 칭하면서 객체 지향적이지 않은 C언어를 표현하기 위한 반대급부로 절차 지향이라는 말이 나오지 않았나 생각해봅니다. 개발 언어는 대개 코드의 위부터 실행됩니다. 당연히 순서가 있으므로 절차가 있습니다. C++로 절차대로 작동합니다. 객체 지향적이지 않을 뿐이지요. 객체 지향 언어와 객체 지향적이지 않은 언어 사이에 우위를 논하기는 어렵습니다. 분야마다 특화된 언어가 있을 뿐입니다. 객체 지향 언어가 필요한 때에는 대규모 프로젝트일 경우입니다. 그래서 C++의 경우 게임 산업에서 많이 애용됩니다. 웹 개발에 사용되는 언어는 전부 객체 지향 언어입니다. 웹 서비스라도..