메모리를 바이트 단위로 복사할 때, c나 c++ 에서는 memcpy와 memmove를 많이 사용합니다. 물론, pod 타입이여야 한다는 전제가 깔리긴 하지만요. 이 둘은 어떻게 쓸까요? c언어 memcpy나, memmove는 1번째 인자가 dest 포인터, 2번째 인자는 orignal 포인터, 3번째 인자를 몇 바이트만큼을 복사할 것인지를 넘겨줍니다. 메모리에 있는 내용을 바이트 단위로 복사하는 것은 두 함수의 공통점입니다. 삽입 정렬을 구현할 때, 이 두 함수를 잘 이용하면 좋겠지요. 첫 번째 예제 프로그램을 봅시다. int형 20개를 저장할 수 있는 ori 배열과 des 배열을 선언했습니다. 저는 ori 배열에 0, 1, ... , 19를 넣었습니다. 원소 갯수는 20개입니다. 그리고, 저는 des가..
레퍼런스 검색 결과
time.h에 들어있는 time 함수는 어떻게 쓰일까요? 이 함수는 1970년 1월 1일 0시 0분 0초부터, 현재 시간까지 경과된 초를 리턴합니다. 예를 들어서 현재 시간이 1970년 1월 2일 0시 0분 0초라면, 86400이 리턴될 겁니다. 이 함수와 관련된 문제 중에는, 2038년 문제가 있는데요. 이것은 오버 플로우를 설명할 때 다시 언급해 드리도록 하겠습니다. time_t는, time_t의 포인터 변수를 받습니다. 그리고, 리턴하는 값 또한 time_t형인데요. 이것은 그냥 integer type이라고 생각하시면 편합니다. 그런데, 1번째 인자에 NULL을 넣을 수도 있고, time_t형 변수의 주솟값을 넣을 수도 있습니다. 다음 예제를 통해서, 이 두 가지 경우에 어떻게 동작하는지 보도록 합..
Java hashCode랑 identityHashCode의 차이점이 무엇일까요? 그에 대해서 답을 하기 전에, 간단한 실험을 하고 넘어갑시다. identityHashCode는 객체가 다르면, 무조건 다른 값을 리턴할까요? 즉, 이 메서드의 리턴 값이, 객체의 고윳값이 될 수 있을까요? 사실 저는 그런 줄 알았습니다. 100만개짜리 Object 객체 배열을 만들었습니다. 그리고, 100만개의 Object 객체를 만들었습니다. 그리고, 객체 arr[i]의 identityHashCode 값을 treeset에다가 넣었습니다. 만약에, 객체 각각의 identityHashCode가 고유하다면, treeset에 들어간 원소 갯수는 100만개였을 겁니다. 그런데 실제로는 999768개입니다. TreeSet은 기본적으로..
이번에는 c++에 있는 bitset 이라는 친구에 대해서 잠깐 알아볼 거에요. 보통, 비트 연산자를 이용해서 상태를 관리할 때, & 연산자를 쓰고 를 쓰고, | 같은 것을 조합해 가면서 쓰셨을 거에요. 익숙해 지면 그렇게 어렵지는 않습니다만, 그래도 조금 더 쉽게, 집합에 x가 포함되는지, 그렇지 않은지, x를 제거하고, x를 추가하는 연산을 조금 더 간편하게 할 수 있는 방법이 없을까요? 이러한 것들은, bitset을 이용해서 너무 쉽게 할 수 있습니다. 그 전에, 이것이 어떠한 구조를 가지고 있는지 간략하게 살펴 봅시다. 많이 물어보시는 가 내부적으로 어떻게 동작하는지부터 간단하게 소개해 보겠습니다. 먼저 비트셋은 word 단위로 이루어진 배열입니다. 그 안에 상태들이 저장이 되어 있는데요. 우리가 ..
java에서 빈 문자열을 비교할 때에는 어떤 메서드를 써야 할까요? length? 아니면 equals? 아니면 isempty? 이 셋이 어떻게 동작하는지 비교를 해 봅시다. 만약에 퍼포먼스가 차이가 난다면 어디서 차이가 나는지도 비교 분석해 보는 것도 좋은 공부가 될 듯싶습니다. 먼저 이것을 테스트할 프로그램을 작성해 봅시다. random 객체를 생성한 다음에 무언가를 하고 있는데요. 문자열 하나를 만들 때마다, 길이도 랜덤 하게 정하고, 문자 또한 랜덤하게 정한다는 것을 알 수 있어요. 문자열을 만드는 작업은 StringBuilder 클래스를 이용하는데요. 단일 스레드 환경에서는 append 작업이 많이 일어나는 경우, String보다 성능이 좋고, StringBuffer보다 빠르기 때문입니다. Str..
최근댓글