본문 바로가기

기타 지식들7

스트링 풀(String Pool, 문자열 풀) ㅇ스트링 풀(String Pool, 문자열 풀): 메모리 관리 기법 중 하나로, 힙 영역에 있는 특별한 저장소주로 문자열(String) 리터럴을 효율적으로 관리하기 위해 사용된다. 스트링 풀이 있는 언어에서는 동일한 문자열 리터럴이 여러 번 사용될 때, 각 리터럴이 별도로 메모리에 저장되지 않고, 이미 존재하는 동일한 문자열 리터럴을 재사용한다. 이렇게 함으로써 메모리 사용을 최적화하고 성능을 향상시킬 수가 있다. ※ 오션월드의 유수풀, 코딩조교실 인력풀 할 때의 그 풀(Pool)이다. 수영장이라는 의미를 기본적으로 갖고 있지만, 프로그래밍에서는 공용 자원을 모아둔 곳을 의미한다. 문자열 풀에서 문자를 찾을 때는 해시 알고리즘을 사용하기 때문에 속도가 매우 빠르다.https://claremont.tist.. 2024. 8. 21.
스코프의 중요성 [스코프 종류]  아래의 C언어 코드를 보자이 코드는 좋은 코드일까? 나쁜 코드일까?#include int main() { int n; int tmp; n = 1; if (n == 1) { tmp = n + 1000; printf("tmp = %d\n", tmp); } printf("n = %d\n", n); return 0;} 정답은 "나쁜 코드"이며 이유는 2가지이다 1. 비효율적인 메모리 사용tmp는 if 코드 블록에서만 사용되지만, main() 코드 블록이 종료될 때까지 메모리에 유지하게 된다. 따라서 불필요한 메모리가 낭비된다. 만약 if 코드 블록 안에 tmp를 선언했다면 C언어를 구현하는 곳에서 if 코드 블록의 종료 시점에 이 .. 2024. 8. 4.
배열의 인덱스가 0부터 시작하는 이유 혹시 배열의 인덱스가 1이 아닌 0부터 시작하는 이유에 대해서 잘 아는가?아마 많은 사람들이 당연하게 인덱스를 0부터 사용하면서 그 이유는 잘 모를 것이다배열의 인덱스를 1이 아닌 0부터 사용하는 데에는 많은 이유가 있다지만, 그중에서 가장 중요하고 본질적인 이유는 바로 "메모리 주소 계산의 용이성"이다  배열은 메모리에서 연속적인 블록으로 할당된다. 배열의 첫 번째 요소의 주소를 기준으로 다른 요소의 주소를 계산할 때, 인덱스가 0부터 시작하면 포인터 산술이 간단해진다. 예를 한 번 들어보면, array[i]는 배열의 첫 번째 요소 주소에 i * 요소 크기를 더한 값과 같게 된다. 인덱스가 0부터 시작하면 첫 번째 요소의 주소에 0을 더하는 것이 되어 매우 직관적이게 된다.C언어와 같은 초기 프로그래밍.. 2024. 7. 24.
전역 변수의 일장일단 (장점) 간편함:작은 프로그램이나 간단한 스크립트에서는 전역 변수를 사용하여 데이터를 공유하는 것이 더 간편할 수 있다. 함수 간에 많은 데이터를 전달하는 복잡함을 피한다.데이터 공유:여러 함수가 같은 데이터를 사용해야 할 때 전역 변수를 사용하면 데이터 전달과 관련된 코드를 줄일 수 있다. 모든 함수가 전역 변수에 접근할 수 있기 때문에 코드가 간결해질 수 있다.메모리 효율성:전역 변수는 프로그램이 실행되는 동안 한 번만 할당되므로 메모리 사용이 효율적일 수 있다. 반복적으로 할당하고 해제하는 비용을 줄인다.상수 데이터:변하지 않는 상수 데이터(예: 설정 값, 하드코딩된 테이블 등)를 저장하는 데 전역 변수를 사용하면 편리하다. 이러한 데이터는 프로그램 전체에서 사용되기 때문에 전역 변수로 정의하는 것.. 2024. 7. 19.
조건식 순서의 중요성 (단락 평가) while (target->key != key && target != NULL) {} 다음 코드는 심각한 오류를 불러올 수 있다왜 그럴까? 한 번 생각해 보자..........이유는 target이 NULL값인 상황에 있다저렇게 target != NULL 조건을 뒤로 보내게 되면 조건식을 따졌을 때 target이 NULL이여도 그대로 target->key != key 조건식을 검사하게 된다 하지만 포인터가 NULL일 때 그 포인터가 가리키는 값을 접근하려고 하면 segmentation fault(프로그램이 허용되지 않은 메모리 영역에 접근하려고 할 때 발생하는 오류)가 일어나게 된다 따라서 조건식을 아래와 같이 target != NULL 먼저 오게 해야 한다while (target != NULL && ta.. 2024. 7. 19.
오버플로우 방지 코드 작성법 4가지 int calculateMid1(int left, int right) { return (left + right) / 2;} 단순히 심플한 수식이지만 오버플로우가 발생할 수 있는 위험한 코드이다오늘은 오버플로우를 방지할 수 있는 코드 작성법 4가지에 대해 설명하려 한다    1. 가장 유명한 방식int calculateMid2(int left, int right) { return left + (right - left) / 2;} 오버플로우 방지의 교과서 같은 방식이다   2. 비트 연산 방식int calculateMid3(int left, int right) { return left + ((right - left) >> 1);} 비트를 오른쪽으로 한 칸 이동시키는 연산으로, 이는 2로 나누.. 2024. 7. 5.
foo bar baz 의미 및 유래 foo, bar, baz, fie, foe, fee, ...프로그래밍 언어 공부를 하다 보면 foo, bar, baz 등의 변수명 등을 본 적이 있을 것이다 (특히 스택 오버플로우에서 많이 보인다)우리나라로 치면 변수명을 갑, 을, 병, 정 느낌으로 선언하는 것이다 그렇다면 이 foo, bar, baz의 유래는 어떻게 될까?이 foo, bar, baz의 유래는 아무도 모른다그치만 유래에 대한 추측들로 크게 3가지가 있다   1. 2차세계대전 당시 미 육군에서 쓰이던 여러 줄임말 중, 개판이 됐다는 뜻인 FUBAR(Fucked Up Beyond All Recognition / Repair)에서 Foo와 Bar가 유래했다는 설  2. 1930 ~ 1952년 사이에 만화가 Bill Holman 이 그린 Smo.. 2024. 3. 26.