분류 전체보기 90

[C/C++] 구조체 패킹 (struct packing)

패킹을 이해하기 전 패딩의 개념을 알아야 한다. https://hackerpark.tistory.com/entry/CC-%EA%B5%AC%EC%A1%B0%EC%B2%B4%ED%81%B4%EB%9E%98%EC%8A%A4-%ED%8C%A8%EB%94%A9-struct-class-padding [C/C++] 구조체(클래스) 패딩 (struct, class padding) 패딩 (padding) 패딩이란 CPU의 효율을 높이기 위해서 효율적으로 메모리를 사용하는 기법 중에 하나이다. (여기서의 효율이란 저장 공간 효율이 아닌 데이터 처리 속도 효율을 의미한다.) 어떤 식 hackerpark.tistory.com 패킹 패킹 (packing) 이란 패딩 규칙에서 기준이 되는 memory block 크기를 변경해서 ..

[GO언어] Go 환경 변수 및 버전 관리하기 (GOROOT, GOPATH)

[이 포스팅은 Windows 환경을 기준으로 작성하였습니다.] GoLand 설치 이후 개발을 진행하던 도중 환경변수가 꼬이는 탓에 엄청난 삽질을 하고 결국 싹 밀고 다시 정리해서 해결하였다. 이 글을 통해 Windows 환경에서 여러 Go 언어 버전에 대한 관리와 GoLand 를 사용한 개발 시 GOROOT, GOPATH 와 같은 환경변수의 관리 및 정리를 기록하려고 한다. GOROOT java 에 비유하자면 JAVA_HOME 같은 환경변수로 Go SDK 를 설치한 경로를 지정하는 환경변수이다. Windows 에서 Go 를 설치하면 기본으로 C:\Program Files\go 경로에 설치가 되고 동시에 기본 GOROOT 의 경로가 된다. GOPATH 개발하는 Go 프로젝트에서 import 할 모듈들이 설..

Go언어 2022.10.04
[C언어] strncpy 함수 (문자열 복사)

사용범위 Windows, Unix 등 모든 OS에서 사용 가능한 표준 API 함수 기능 C언어 표준 함수로 string 을 복사하는 데 사용한다. 헤더 #include ※ 함수 사용시 string.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 char* strncpy(char* dest, const char* source, size_t count); 파라미터 char* dest destination 의 약자로 복사한 문자열을 저장할 대상의 버퍼를 입력한다. 반드시 유효한 주소값을 입력해야 하고 유효하지 않은 주소 입력 시 signal 이 발생한다. const char* source dest 에 복사할 데이터 버퍼를 입력한다. size_t count source 에서 dest ..

C언어/string.h 2022.10.03
[C/C++] 구조체(클래스) 패딩 (struct, class padding)

패딩 (padding) 패딩이란 CPU의 효율을 높이기 위해서 효율적으로 메모리를 사용하는 기법 중에 하나이다. (여기서의 효율이란 저장 공간 효율이 아닌 데이터 처리 속도 효율을 의미한다.) 어떤 식으로 메모리를 사용하길래 효율적이라는 걸까? CPU의 데이터 처리 (매우 간략하게) 패딩을 설명하기 전에 CPU의 동작 방식에 대한 이해가 필요한데 너무 깊이 들어가면 이 글의 주제에서 벗어나기 때문에 간략하게 짚고 넘어가려고 한다. 요즘 대부분의 CPU 는 64bit 를 지원하는 x86_64 아키텍처를 사용하고 있다. 이것은 한 번의 CPU 연산으로 처리하는 최대 데이터의 크기가 64bit 즉, 64bit = 8byte 로 메모리에 적재된 데이터를 한 번에 8byte 까지 처리할 수 있다는 의미이다. CP..

[Golang] Go 언어 module (mod) 설정

간단한 Go 예제 샘플이 아닌 실무에서 사용할 수 있는 패키지 구성이 필요했다. Go 프로젝트도 한 개가 아닌 상황에서 프로젝트 안에서 사용하는 go package 가 많아지고 있었기 때문에 기능별 package 를 세분화해서 관리를 하려고 했다. 문제는 같은 프로젝트에서 만든 package 를 못 찾는다는 점이었다. 프로젝트의 module 이 생성되어있지 않아서 생긴 문제로 module 생성을 하면 해결되는 문제이다. 우선 module 을 아래의 방법으로 생성한다. $ cd ${project_directory} $ go mod init ${module_name} go: creating new go.mod: module ${module_name} go: to add module requirements a..

Go언어 2022.09.29
[Golang] go 언어 개발 시작하기

go언어는 2018년도부터 관심을 가지고 틈틈이 공부하고 있었는데 얼마 전 새로운 프로젝트를 go언어로 진행하게 되었다. go언어에 대해서는 많은 것들이 새로운 경험이기 때문에 프로젝트 도중 경험하게 될 수많은 삽질(?) 들을 정리할 예정이다. 그중 처음 시작인 GoLand 설치 과정을 정리해볼까 한다. 개발자에게 IDE 이란 굉장히 중요한 툴이라고 생각한다. (개발자의 눈과 손이다.) 새로운 언어를 접하게 된다면 새로운 IDE 를 알아보는 설렘도 느낄 수 있다. Go언어는 찾아보니 대부분 실무에서 두 종류의 IDE 를 사용하는 것으로 보인다. Microsoft 에서 개발한 비주얼 스튜디오 코드 (Visual Studio Code) JetBrains 에서 개발한 고랜드 (GoLand) 더보기 두 종류라고..

Go언어 2022.09.29
[C언어] strtok 함수 (문자열 자르기)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 문자열을 특정 문자열 기준으로 자를때 사용한다. 헤더 #include ※ strtok 함수 사용시 string.h 파일을 include 하지 않는다면 컴파일시 error 발생 ※ 함수 char* strtok(char* str, const char* delim); 파라미터 char* str 자르려는 문자열 버퍼를 입력한다. 처음 문자열을 자른(= strtok 호출) 이후 남은 문자열을 다시 자를 경우 NULL 을 입력한다. const char* delim str 문자열을 잘라낼 기준 문자열을 입력한다. 반환값 (return) delim 을 기준으로 문자열을 잘라낸 경우 : 잘라낸 문자열(포인터)을 반환..

C언어/string.h 2022.09.20
[C언어] memcpy 함수 (메모리 복사)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 특정 주소에 저장되어있는 데이터를 복사할때 사용한다. 헤더 #include ※ memcpy 함수 사용시 string.h 파일을 include 하지 않는다면 컴파일시 error 발생 ※ 함수 void* memcpy(void* dest, const void* source, size_t size); 파라미터 void* dest 복제된 데이터를 저장할 버퍼를 입력한다. const void* source dest 에 복제할 데이터 버퍼를 입력한다. size_t size 복제할 데이터의 크기를 byte 단위로 입력한다. 반환값 (return) 복제를 완료한 dest 값을 반환한다. 잡학지식 strncpy 와 m..

C언어/string.h 2022.09.19
[C언어] memccpy 함수 (특정 문자까지만 메모리 복사)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 특정 문자까지의 데이터를 복사할때 사용한다. 헤더 #include ※ memccpy 함수 사용시 string.h 파일을 include 하지 않는다면 컴파일시 error 발생 ※ 함수 void* memccpy(void* dest, const void* src, int val, size_t size); 파라미터 void* dest 복제된 데이터를 저장할 버퍼를 입력한다. const void* src dest 에 복제할 데이터 버퍼를 입력한다. int val 복제 도중 src 에서 발견하면 중단할 문자를 입력한다. 문자 val 을 만나면 val 까지 복사하고 중단한다. 예를 들어 'a' 같은 작은 따옴표를..

C언어/string.h 2022.09.16
[C언어] strcat 함수 (문자열 연결)

사용범위 Windows, Unix 등 모든 OS에서 사용 가능한 표준 API 함수 기능 C언어 표준 함수로 문자열에 문자열을 연결할때 사용한다. 헤더 #include ※ strcat 함수 사용시 string.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 char* strcat(char* dest, const char* source); 파라미터 char* dest 연결(변경)하려는 target string 버퍼를 입력한다. 반드시 NULL 문자로 종료되어야 한다. const char* source dest 에 연결할 string 을 입력한다. 반드시 NULL 문자로 종료되어야 한다. 반환값 (return) dest 에 source 를 연결한 이후 연결된 string 버퍼인 de..

C언어/string.h 2022.09.15
반응형