본문 바로가기

전체 글

(83)
C언어 구조체 메모리 활용하기(초기화 0) https://www.yes24.com/Product/Goods/117080938 C 언어 코딩 도장 - 예스24프로그래밍은 연습으로 배우는 것이다!가장 깊이 있는 C 언어 입문서C 언어의 난해하고 까다로운 주제도 생략하지 않고 단계별로 차근차근 설명한다. 개념을 생략하고 쉬운 책이 되는 것보단 제www.yes24.com 공부한 것을 정리한 내용입니다. 구조체의 메모리값을 0으로 설정하거나 초기화 할려면 memset(구조체포인터, 설정한 값, sizeof(struct 구조체)); 함수를 이용하면 된다. #include #include // memset 함수가 선언된 헤더파일 struct active { int x; int y; }; int main(){ struct active a1; memset(&a1..
C언어 구조체 멤버 정렬(alignment) 사용 https://www.yes24.com/Product/Goods/117080938 C 언어 코딩 도장 - 예스24프로그래밍은 연습으로 배우는 것이다!가장 깊이 있는 C 언어 입문서C 언어의 난해하고 까다로운 주제도 생략하지 않고 단계별로 차근차근 설명한다. 개념을 생략하고 쉬운 책이 되는 것보단 제www.yes24.com 공부한것을 정리한 내용입니다. C언어 컴파일러는 CPU가 메모리의 데이터에 효율적으로 접근할 수 있도록 구조체를 일정한 크기로 정렬한다. 예를 들어 구조체 크기가 15,17 바이트가 되면 접근 효율이 떨어지므로 2, 4, 8, 16 바이트 단위로 정렬을 한다. 하지만 예외가 있는데 사진파일을 저장할 때마다 정렬이 발생해 사진이 깨질 수도 있고 네트워크 데이터를 전송할 때 몇바이트씩 보내..
C언어 공용체와 리틀 엔디언 https://www.yes24.com/Product/Goods/117080938 C 언어 코딩 도장 - 예스24프로그래밍은 연습으로 배우는 것이다!가장 깊이 있는 C 언어 입문서C 언어의 난해하고 까다로운 주제도 생략하지 않고 단계별로 차근차근 설명한다. 개념을 생략하고 쉬운 책이 되는 것보단 제www.yes24.com공부하고 정리한 내용을 올렸습니다. (페이지 590쪽) 우리가 사용하는 x86(x86-64) 계열 CPU는 리틀 엔디언이라는 방법으로 값을 메모리에 저장합니다. 간단하게 이야기하면 리틀 엔디언은 숫자를 1바이트씩 쪼개서 낮은 자릿수가 앞에 옵니다. 사람이 보기에는 반대로 뒤집혀 있죠. #include union Data { char c1; // 1 바이트 short num1; // 2바이..
C언어 구조체 포인터 구조체에 포인터를 사용해서 맴버 변수에 접근하고 싶을 때 어떻게 하면 좋을까? 구조체 변수를 일일이 선언해서 사용하는 것보다는 구조체 포인터를 선언하고 malloc함수를 사용해서 구조체 포인터에 동적 메모리를 할당한 다음 화살표 연산자나 -> .(점)을 사용해서 구조체 멤버의 값에 접근한다. 구조체안에 있는 멤버 변수들 struct Data{ char c1; int *numPtr; }; 1. 먼저 구조체 포인터를 선언하고 malloc 함수를 사용해 동적 메모리를 할당한다. ex) struct Data *d2 = malloc(sizeof(struct Data)); 2. 여기서 역참조 하는것에 괄호를 붙이면 구조체 포인터를 역참조한 뒤 .(점)을 사용하여 맴버에 접근할 수 있다. ex) 구조체 포인터의 예 ..
러스트 프로그래밍 - 스코프를 벗어나면 drop https://www.yes24.com/Product/Goods/116789691 프로그래밍 러스트 - 예스24 『러스트 프로그래밍 공식 가이드』보다 더 친절하게, 한층 더 고급 기능까지 다룬다!이 책은 메모리 안전성과 신뢰할 만한 동시성에 예측 가능한 성능을 더한 러스트의 기능이 어떤 식으로 메 www.yes24.com https://www.yes24.com/Product/Goods/116586619 만들면서 배우는 러스트 프로그래밍 - 예스24 고효율, 현대적 프로그래밍 언어 Rust의 결정적 해설서!러스트는 효율적이고 신뢰할 수 있으며 생산성이 높은 언어로, 프로그래머가 가장 배우고 싶어 하는 언어로 꼽힌다. 배울 가치가 높은 언 www.yes24.com 실습하면서 공부하고 정리한 것을 올린것입니다..
러스트 프로그래밍 - 참조 & 와 빌림(borrow) https://www.yes24.com/Product/Goods/116586619 만들면서 배우는 러스트 프로그래밍 - 예스24 고효율, 현대적 프로그래밍 언어 Rust의 결정적 해설서!러스트는 효율적이고 신뢰할 수 있으며 생산성이 높은 언어로, 프로그래머가 가장 배우고 싶어 하는 언어로 꼽힌다. 배울 가치가 높은 언 www.yes24.com 책을 읽고 실습한 것을 정리한 내용을 올린 것입니다. 소유권을 일시적으로 빌려 주고싶을 때 함수를 만든 뒤 함수 인자에 참조자 &를 넣어서 전달한다. 그래서 소유권 문제를 해결 할수 있다
러스트 프로그래밍 - 힙(heap)영역과 스택(stack)영역 https://www.yes24.com/Product/Goods/116586619 만들면서 배우는 러스트 프로그래밍 - 예스24 고효율, 현대적 프로그래밍 언어 Rust의 결정적 해설서!러스트는 효율적이고 신뢰할 수 있으며 생산성이 높은 언어로, 프로그래머가 가장 배우고 싶어 하는 언어로 꼽힌다. 배울 가치가 높은 언 www.yes24.com 힙(heap) 영역에 저장된 메모리는 임의의 순서로 메모리를 확보하거나 해제할 수 있다.원할 때 만큼 메모리를 확보할 수 있다. 예를들어 문자열(String 타입)이나 구조체같이 가변크기 같은 변하는 데이터는 힙영역에 저장되서 소유권관리를 받게된다. 반면 스택(stack) 영역은 이미 데이터가 정해져 있어서 예를 들어 숫자 데이터 등의 기본 타입 데이터는 스택영역에..
러스트 프로그래밍 - 소유권과 이동 이동을 설명하기전에 먼저 소유권을 알아야한다. 하나의 변수의 값에는 하나의 소유권이 있다. 파이썬과 C++ 코드 비교를 통해 소유권을 알아보자 먼저 파이썬 코드를 보면 s = ['피자', '치킨', '콜라'] t = s u = s 리스트 s 가 t,u 에 할당 되면서 래퍼런스 카운터가 증가되어 3을 갱신한다. 값을 해체할때는 시점을 알기위해서는 반드시 래퍼런스 카운트를 유지시켜야 한다. C++ 코드를 보면 using namespace std; vector s = { "피자", "치킨", "콜라"}; vector t = s; vector u = s; std::vector는 백터의 복사본이 만들어지고 std::string도 비슷하게 작동한다. 벡터3개와 문자열 총 9를 할당하게 된다. https://www...