분류 전체보기 94

[C언어] memchr 함수 (버퍼에서 문자 검색)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 버퍼 범위에서 특정 문자의 첫 번째 위치를 찾을 때 사용한다. 헤더 #include ※ memchr 함수 사용 시 string.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 void *memcpy(const void *buf, int val, size_t count); 파라미터 const void *buf 특정 문자를 검색할 버퍼를 입력한다. int val 버퍼에서 검색할 문자를 입력한다. size_t count 검색할 버퍼의 범위를 byte 단위로 입력한다. 반환값 문자(val) 을 찾은 경우 문자열에서 val 의 첫 번째 위치의 포인터를 반환 문자(val) 을 찾지 못..

C언어/string.h 2022.12.22
[C언어] strchr 함수 (문자열에서 문자 검색)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 문자열에서 특정 문자의 첫 번째 위치를 찾을 때 사용한다. 헤더 #include ※ strchr 함수 사용 시 string.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 char *strchr(const char *str, int val); 파라미터 const char *str 특정 문자를 검색할 문자열 버퍼를 입력한다. int val 문자열 버퍼에서 검색할 문자를 입력한다. 반환값 (return) 문자(val) 을 찾은 경우 문자열에서 val 의 첫 번째 위치의 포인터를 반환 문자(val) 을 찾지 못한 경우 NULL 을 반환 잡학지식 strchr 함수는 검색하는 str..

C언어/string.h 2022.12.22
[Go언어] 구조체 패딩 & 패킹 (Golang struct padding & packing)

Go 프로젝트를 진행하면서 다른 프로세스와의 TCP 통신 구조를 만들어야했다. 그래서 Go언어의 구조체는 패딩바이트가 들어가는지 확인을 해보았다. (패딩이 뭔지 모른다면 아래 글을 참조) 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의 효율을 높이기 위해서 효율적으로 메모리를 사용하는 기법 중에 하나이다. (여기서의 효율이란 저장 공간 효율이 아닌 데이터 처리 속도 효율을 의미한다.) 어떤 식 h..

Go언어 2022.11.16
[C언어] memcmp 함수 (메모리 비교 함수)

사용범위 Windows, Unix 등 모든 OS에서 사용 가능한 표준 API 함수 기능 C언어 표준 함수로 memory 데이터를 비교할 때 사용한다. 헤더 #include ※ 함수 사용시 string.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 int memcmp(const void* buf1, const void* buf2, size_t size); 파라미터 const void* buf1 비교할 첫번째 포인터(주소)를 입력한다. (반드시 유효한 포인터(주소)를 입력해야 한다.) const void* buf2 비교할 두 번째 포인터(주소)를 입력한다. (반드시 유효한 포인터(주소)를 입력해야 한다.) size_t size buf1 과 buf2 를 비교할 바이트 크기를 입력한..

C언어/string.h 2022.11.11
[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
반응형