검색결과 리스트
C에 해당되는 글 21건
- 2014.03.18 가운데 정렬, 중앙 이미지 고정, absolute 이용한 중앙 정렬, body 요소 가운데
- 2014.03.18 while-space, workd-break, word-wrap, text-overflow
- 2011.11.05 이상적인 Com?
- 2011.11.03 포인터는 왜 어려울까?
- 2011.10.28 보안이 강화된 문자열 복사 함수 외
- 2011.10.28 헤더 파일의 중복 정의 막기
- 2011.10.28 C언어 - 긴 문자열 초기화
- 2011.10.28 S1080 사용 후기
- 2011.10.27 밴치마크 테스트
- 2011.10.23 c/c++ 2차원(이차원) 배열 동적할당 방법2
글
가운데 정렬, 중앙 이미지 고정, absolute 이용한 중앙 정렬, body 요소 가운데
가운데 정렬
1.
<style>
body {}
.center { background : url(4.png) no-repeat;
width : 700px;
height : 700px;
margin : 0 auto;
}
</style>
2.
<div style="width : 100%; text-align : center;">
<div style="width : 860px; height : 700px; margin : auto;"></div>
< /div>
---------------------------------------------------------------------
중앙 이미지 고정
background : url(*.jpg) no-repeat fixed center center;
---------------------------------------------------------------------
absolute 이용한 중앙 정렬
#gotop {
position : absolute;
left : 50%;
top : 50%;
margin-left : 410px;
background : #ddd;
width : 100px;
height : 1000px;
}
---------------------------------------------------------------------
body 요소 가운데
body {
margin : 0 auto;
width : 930px;
position : relative;
}
'C > CSS' 카테고리의 다른 글
CSS zoom 오브젝트를 확대 시켜 주는 속성 (0) | 2014.03.19 |
---|---|
CSS로 심플라인 테이블 (0) | 2014.03.18 |
div에서 vertical-align : middle 적용하기 (0) | 2014.03.18 |
Table 태그 CSS (0) | 2014.03.18 |
while-space, workd-break, word-wrap, text-overflow (0) | 2014.03.18 |
글
while-space, workd-break, word-wrap, text-overflow
white-space
공백 문자는 어떻게 다룰 것인지 지정하는 코드. (HTML 코드 상에서 띄어쓰기나 줄바꿈, 탭으로 인한 공백 부분 등등)
white-space : normal;
기본값, 연속 공백과 줄바꿈 등은 통합해서 표현. (보통 띄어쓰기를 500번 하든지 줄바꿈을 하든지 결과는 띄어쓰기 한칸 인 것처럼 적용됨)
white-space : pre; - 원문 그대로 출력. normal과 반대.
white-space : nowrap; - 스페이스 바를 막 눌러서 들어가는 연속 공백은 통합되지만 (normal의 효과) 줄바꿈은 인정함.
white-space : inherit; - 부모 요소의 값을 상속
-------------------------------------------------------------------------------------------
word-break
텍스트가 들어가는 블록 요소의 가로 사이즈에 맞춰 줄바꿈 해줄까. 말까 하는 코드
강제 줄바꿈 방지. 텍스트 길이 제한.
word-break : normal; -> 기본값, 단어단위로 끊어서 줄바꿈.
word-break : break-all; -> 특수문자를 제외하고 강제로 줄바꿈.
word-break : break-word; -> 특수문자를 포함하고 강제 줄바꿈.
word-break : nowrap; -> 줄바꿈하기 싫을 때
word-break : keep-all; -> 한글일 경우 띄어쓰기 기준으로 짤림.
-------------------------------------------------------------------------------------------
word-wrap
텍스트가 들어가는 블록 요소의 사이즈에 따라 줄바꿈 해주는 코드.
word-wrap : break-word;
가로 사이즈나 엘러먼트에 맞춰서 강제 줄 바꿈 해준다.
word-break : break-all; 과 같은 결과물
-------------------------------------------------------------------------------------------
Text-overflow
긴 문자열을 잘라주는 형태를 지정
text-overflow : clip;
엘리먼트의 테두리에 맞춰서 글자를 자른다.
text-overflow : ellipsis;
잘라지는 끝 부분에 자동으로 '...'을 넣어준다. (ie6이상에서만 지원가능. 파폭은 안됨.)
* width 값이 지정되어야함. / 높이를 정해주거나 white-space : nowrap; 속성을 사용해야함.
* span이나 a태그에 사용할 때는 display : inline-block을 줘서 블록 속성을 지정해줘야합니다.
-> 일반 인라인 속성이라면 아무리 가로 사이즈를 지정해줘도 못 알아먹습니다.
ex) display : inline-block; text-overflow : ellipsis;
overflow : hidden; white-space : nowrap;
* div나 selection 같은 기본 블록 요소들은 display 지정을 안해도 됩니다.
'C > CSS' 카테고리의 다른 글
CSS zoom 오브젝트를 확대 시켜 주는 속성 (0) | 2014.03.19 |
---|---|
CSS로 심플라인 테이블 (0) | 2014.03.18 |
div에서 vertical-align : middle 적용하기 (0) | 2014.03.18 |
Table 태그 CSS (0) | 2014.03.18 |
가운데 정렬, 중앙 이미지 고정, absolute 이용한 중앙 정렬, body 요소 가운데 (0) | 2014.03.18 |
글
이정도의 성능 정도라면 행복하게 컴텨를 할 수 있을꺼같다.
여기서 제외 시켜야할 부분은 아마도 윈도우7 ( - 124,500 )
'C > Com' 카테고리의 다른 글
S1080 사용 후기 (0) | 2011.10.28 |
---|---|
밴치마크 테스트 (0) | 2011.10.27 |
글
포인터는 왜 어려울까?
출처 : http://minjang.egloos.com/2291148
왜 C/C++를 가장 강력하고 또 가장 어려운 언어라고 할까? 아마 대부분 이 물음에 ‘포인터’로 답할 것이다. 포인터는 강력함과 동시에 수 많은 어려움을 선사하여 많은 C/C++ 개발자를 괴롭힌다. 포인터로 고생하는 초보자들은 어디서나 볼 수 있다. 심지어는 포인터만 다룬 책들도 많이 있다. 도대체 포인터는 왜 이렇게 어려울까?
먼저, C/C++의 포인터 문법 자체가 복잡하다. 대부분 주소 값을 얻거나(&) 그 주소 값의 내용을 읽는 것(*)만 알아도 되지만 포인터 형태가 조금만 복잡해져도 사실 쉽지 않다. int *a[3]은 매우 간단하지만 int (*a)[3]만 되어도 그리 쉽게 머리 속에 그림이 잘 안 그려진다. 게다가 C++로 가면 클래스 멤버 함수까지 생기니 더 복잡해진다.
그런데 이건 어디까지나 문법의 문제다. 초보 개발자가 포인터형 자료구조나 함수 포인터에 쩔쩔매는 이유는 사실 문법이 어려워서가 아니다. 아무리 포인터를 공식에 맞춰 해석해도 데이터나 코드를 ‘가리킨다’라는 개념이 명확하지 않아서 그렇다.
포인터가 어려운 이유는 사실 매우 간단하다. ‘컴퓨터’를 몰라서 벌어지는 비극이다. 좀 더 정확히 쓰면 C/C++ 코드 한 줄이 어떻게 컴파일러가 번역하고, 어떻게 운영체제가 실행을 시키고, 마지막으로 어떻게 프로세서 내부에서 처리되어 메모리를 변화 시키는지 감이 없기 때문에 이해가 안가는 것이다. 컴퓨터 시스템의 기본 원리를 모르는데 야리꾸리한 비유를 동원해 포인터를 배우려 하니 더 헷갈릴 뿐이다.
여기서 대충 C 수업 숙제만 해결하면 되는 친구라면 컴퓨터 시스템 따위 공부해봤자 인생에 도움 안되니 대충 대충 넘어가도 된다. 그런데 최소한 이 바닥에서 진짜 개발자로 먹고 살려면 기본적인 컴퓨터 시스템에 대한 이해는 필수다. 그러면 포인터는 문제 되지 않는다. 이중포인터니 뭐 그런 소리를 할 필요도 없다. 포인터가 그냥 데이터나 코드를 가리킨다는 기본적인 사실에 왜 컴퓨터가 이런 표현을 필요로 하는지만 이해하면 끝난다.
간단한 문제를 하나 생각해보자.
a = a + 1;
위 코드에서 변수 a는 지역 변수이다. 그럴 때 이 코드가 어떻게 컴파일러에 의해 번역되어 어떻게 메모리를 변화시키는지 10분 이상 설명해보라.
. . .
이 질문에 막힘이 없는 친구라면 포인터로 절대 고생하지 않을 것이다. 그런 친구가 설사 포인터로 삽질한다 하더라도 그건 단순히 문법에 대한 혼동일 뿐이다. 이 질문에 답할 자신이 없다면 지금 C/C++ 책이나 무슨 디자인 패턴 책을 봐야 할 때가 아니다. 기본적인 컴퓨터 시스템부터 공부해야 한다.
위 문제를 이제 좀 더 자세히 살펴보자. 질문을 던졌던 코드를 x86 32비트로 컴파일하면 보통 아래처럼 번역된다.
mov eax,dword ptr [ebp-4]
add eax,1
mov dword ptr [ebp-4],eax
아니면 바로 CISC 스타일로 표현되기도 한다.
inc dword ptr [ebp-4]
여기서 내가 x86 기계어를 반드시 이해해야 한다고 말하는 것이 아니다. 내가 주장하는 것은 최소한 컴파일러가 어떻게 저 간단한 덧셈 문장을 기계어로 바꾸는지는 알아야 한다는 것이다. MIPS가 되었던 ARM이 되었던 상관없다. 살짝 형태만 다르지 기본 틀은 같다.
만약 위 기계어의 모든 부분을 하나도 빠짐 없이1 설명할 수 있다면 컴퓨터 시스템도 대부분 이해하고 있을 뿐만 아니라 포인터의 대부분도 이해한다는 뜻이다. 나머지는 함수 포인터에 대한 내용이긴 한데 역시 함수 호출이 스택에서 어떻게 이루어지는지만 알아도 문제가 되지 않는다.
이 기계어를 조금 설명하면, 변수 a의 값을 1을 증가시키려면 (1) 변수 a가 있는 주소의 내용을 임시 레지스터로 읽어오고, (2) 이 레지스터의 값을 하나 증가시키고, 마지막으로 (3) 변수 a가 있는 주소에 이 레지스터 내용을 써주는 것이다.
“a = a + 1”에는 어떠한 포인터 표현도 없다. 그런데 컴퓨터는 이걸 포인터로 해석해서 실행하는 것이다. 이렇게 포인터는 컴퓨터 기본 시스템 작동 원리만 알면 너무나 자연스러운 개념이 된다.
지금 저 무시하나효? 저 이 정도는 다 알아욤. 그래도 포인터는 어렵던데요?
라고 반문하시면 난 여전히 이 코드를 제대로 이해하지 못해서 벌어지는 일이라고 말하고 싶다. 정말 장담 하는데 저 간단한 덧셈 코드의 기계어 작동만 “다 알아도” 포인터는 진짜 아무것도 아니다. (추가: malloc/free, new/delete과 같은 힙 할당으로 인한 포인터 사용은 이 포스팅에서 다루는 내용이 아니다.)
더 나가 왜 지역 변수 a가 ‘ebp-4’ 같은 주소에 있는지도 알면 매우 좋다. 이걸 알면 자동으로 스택과 함수 호출 규약도 자연스레 알 것이고, 왜 함수 호출 비용이 있고, 왜 컴파일러가 함수를 인라인하는지 등등 알게 되는 사실이 눈덩이처럼 불어난다.
그럼 나무라지만 말고 좀 친절히 책도 추천해주세요. 21일 완성 같은 거 없어요?
사실 난 21일 완성 시리즈를 참 좋아했다. 농담 아니고 나의 첫 번째 C 공부 역시 21일 완성으로 했다. 그런데 아쉽게도 지금까지 내가 열심히 떠든 “컴퓨터 시스템”에 대해 가볍게 볼 수 있는 책은 그리 많지 않다. 보통 대학교에서 강의하는 시스템 프로그래밍 정도 수업 내용을 참고하면 된다. 몇몇 대학교의 시스템 프로그래밍 강좌 홈페이지에가서 강의 자료 내려 받아 보는 것도 매우 좋다. 좀 더 내공을 더 기르고 싶으면 특정 CPU 아키텍처를 섭렵하면 된다. 예를 들어, x86의 내용을 알고 싶으면 여기에 가서 Volume 1과 Volume 3A를 참고 하면 된다. 다 보는 건 사실 말도 안되고 중요 챕터만 봐도 정말 많은 걸 알 수 있다.
두 줄 요약:
아놔. 요즘 컴퓨터 빠른데 이런 거 진짜 알아야 해요? STL 쓰는 법도 알아야 하고 디자인 패턴도...
네, 개발자, 적어도 C/C++ 개발자라면 꼭 아셔야 합니다.
1 대충 열거하면: opcode, 레지스터, 데이터 정렬 문제, CISC/RISC의 차이(더 이상 이 논쟁은 유효하지 않음), 캐시/메모리, 가상메모리, 스택/힙/코드 등등
p.s. 이번 달 마소에 “개발자 업그레이드 시나리오: 수퍼 개발자의 꿈”이라는 코너에 민망한 글을 하나 썼다. 블로그에 올리려니 넘 남사시러워 요즘 출판 업계도 불황이고 하니 직접 책을 사보시던가 아니면 가까운 서점에 나가셔서 보시기를 바란다. 그 기사에서 내가 주장한 바가 위에서 떠든 이야기랑 비슷하다. 수퍼 개발자가 되려면 기초 체력, 그러니까 기초 전산 실력이 매우 중요함을 역설했다. 서두에 살짝 포인터 이야기를 꺼냈는데 이 포스팅에서는 포인터를 가지고 물고 늘어진 것임.
'C > C' 카테고리의 다른 글
헤더 파일의 중복 정의 막기 (0) | 2011.10.28 |
---|---|
C언어 - 긴 문자열 초기화 (0) | 2011.10.28 |
c/c++ 2차원(이차원) 배열 동적할당 방법2 (0) | 2011.10.23 |
C언어 할 때 알면 좋은 것 (0) | 2011.10.20 |
글
보안이 강화된 문자열 복사 함수 외
출처 : http://moogi.new21.org/tc/210?category=21
C/C++ 언어는 언어 차원에서 자체 제공하는 문자열 타입이란 게 없다.
문자열은 단순히 문자의 배열 내지 이를 가리키는 포인터로 취급되며, 코드 번호 0인 문자가 문자열의 끝을 나타내는 매우 원시적이고 단순한 방법을 사용하고 있다. 그 이름도 유명한 null-terminated string 기법이다. (이하 편의상 NTS로)
깔끔하고 쓰기 편한 문자열 처리를 제대로 구현하는 데 드는 비용을 감안한다면, 이것은 그렇게 나쁜 방법은 아니다. string은 int보다야 처리하기가 훨씬 무거운 건 사실이다. 더구나 C/C++은 정말 1바이트라도 더 아끼고 한 클럭이라도 더 줄여야 하는 시스템 프로그래밍 용도로 개발된 언어인 것이다.
NTS 방식으로 문자열을 다루지 않는 언어도 있다. 이런 언어는 문자열의 길이는 별도의 장소에 보관하며 스트링의 내부에 0번 문자가 있을 수도 있다. 그런데 이런 언어로 프로그램을 짜더라도, NTS를 받는 운영체제 API에다 문자열을 넘겨줄 때는 뒤에다 0번 문자를 손수 추가하여 문자열을 변환하곤 한다. 운영체제 커널이야말로 C 언어 기반인 경우가 태반이기 때문이다.
하지만 다른 모든 곳에는 NTS 문자열 포인터만 받더라도, 그래픽 API는 비록 C언어 스타일이라 할지라도 이례적으로 문자열 포인터뿐만 아니라 문자열의 길이를 별도의 인자로 따로 받는 경우가 많다. 윈도우 API도 그 대표적인 예인데, 그 이유는 명백하다. 그래픽 처리의 특성상 NTS 문자열을 일부 몇 글자만 찍어야 하는 경우도 빈번하게 발생하기 때문이다.
NTS는 간단하고 효율적인 대신, 문자열의 끝을 언어나 프레임워크 차원에서 보장을 하지 않는다는 특성 때문에 오늘날 버퍼 초과 같은 보안 문제의 온상이 되어 있다. 가령, C 표준 함수 중에 strcpy는 잠재적으로 굉장히 위험한 함수이거니와, 파일도 아니고 키보드 입력을 받는데도 버퍼 크기 한계 지정도 없이 설계되어 있는 gets는 정말 도저히 그대로 쓸 수 없는 지경이 되어 있다.
이 문제를 해결하기 위해 윈도우 SDK에는 꽤 오래 전부터 StringCb* 함수들을 도입했다. write 버퍼의 포인터뿐만 아니라 버퍼 크기도 별도로 지정하여 복사가 그 영역 밖으로는 되지 않게, 즉 문자열이 잘리도록 조치를 취한 것이다. 이것들은 그냥 static 링크되는 코드이지 운영체제 커널 DLL에 있지는 않다는 점에서 lstrcpy 같은 함수와는 위상이 다르다. 사실 저 함수 자체가 기존 커널 l* 함수보다 더 안전한 솔루션을 제공하기 위해 추가된 것이다.
비주얼 C++ 2005부터는 보안 문제를 더욱 적극적으로 대처하는 함수군이 생겼다. 아예 _s 접미사가 붙은 strcpy_s 류이다. 이것도 하는 일은 기존 strcpy보다 더욱 안전하게 문자열을 복사하는 것이지만, 다음과 같은 면에서 StringCb*와는 동작 방식이 약간 다르며, 쓰임이 더 엄격하다는 것을 알 필요가 있다.
첫째, StringCb*는 버퍼 크기가 걸리면 문자열을 그냥 자르고 null-terminate까지 알아서 시켜 주는 반면, *_s는 런타임 에러를 발생시킨다. 그러므로 전자는 단순히 로그를 찍는 것과 같이 문자열이 꼭 다 복사되지는 않아도 되고 버퍼 초과 에러만 예방하고 싶을 때 쓰면 되며, 후자는 어떤 경우에도 버퍼가 초과하는 일 자체가 없이 문자열이 100% 정확하게 복사되는 게 보장되어야 할 때 쓰면 된다.
둘째, 특히 디버그 버전의 *_s 함수는 지정해 준 버퍼 영역을 다 검사한다. 비록 지금 한 글자밖에 복사할 게 없더라도 사용자가 100글자를 지정했다면 그 메모리가 다 안전한지 일일이 검사한다는 뜻이다. 그렇기 때문에
char a[8];
strcpy_s(a, 12, "ABC"); //12>8
는 비록 전혀 해롭지 않은 코드임에도 불구하고 에러를 일으킨다. 디버그 빌드에서는 말이다.
strcpy 같은 간단한 함수뿐만 아니라 scanf 함수도 쓰임이 강화되었다. 가령,
char s[64];
scanf_s("%s", s, 64);
이런 식으로 %s도 버퍼뿐만 아니라 버퍼의 크기까지 덧붙이도록 동작이 수정되었다는 뜻이다.
*_s 함수는 일부 템플릿 오버로드 버전도 존재하기 때문에, 기존 코드에다 *_s 함수를 넣는 리팩터링 작업을 할 때 일일이 배열 사이즈를 집어넣어야 하는 수고를 상당수 덜어 준다. 가령, 쓰기 버퍼가 포인터가 아니라 static 배열인 경우,
template<int N>
.... strcpy_s(char (&dst)[N], const char *src)
{
return strcpy_s(dst, N, src);
}
이런 템플릿 오버로드가 이미 구비되어 있는 덕분에, strcpy를 strcpy_s로 바꾸기만 해도 알아서 배열의 크기가 전달된다. 물론 컴파일 타임에 말이다.
물론, 쓰기 버퍼가 임의의 포인터인 경우에는 이런 방법을 쓸 수 없고 사용자가 버퍼 크기를 수동으로 전달해 줘야 할 것이다.
본인도 어지간하면 이런 안전한 함수를 쓰고 싶은데, strchr/strstr 같은 함수의 결과값에다가 또 strcpy를 해야 할 때는 남은 버퍼 크기를 지정해 주는 게 좀 난감하다.
덧.
1. C언어에서 정적 배열의 원소 개수를 구할 때는 통상
#define ARRAYSIZE(x) sizeof(x)/sizeof(x[0])
과 같은 형태로 정의하며, 이렇게만 써 놔도 이 식은 최적화 과정에서 모두 컴파일 타임 때 고정된 값이 계산되어 들어간다. 하지만 ARRAYSIZE 매크로도 템플릿을 이용한 매크로로 바꾸면 나눗셈 연산도 없고 더구나 배열이 아닌 일반 포인터를 넘겨주면 에러까지 나는(더욱 type-safe하기까지 한) 버전을 만들 수 있다.
템플릿으로 컴파일 타임 때 정말 별 걸 다 할 수 있다. ^^;; strcpy_s의 템플릿 오버로드 버전을 보니까 문득 이게 생각이 났다.
2. 아울러 어떤 구조체 멤버가 메모리 상으로 몇째 오프셋을 나타내는지 가리키는 매크로도 NULL 포인터로부터 ->로 참조한 멤버 값의 주소를 가리키는 방식으로 만들 수 있다. NULL 포인터는 -> 연산자를 적용하기만 하면 바로 에러가 날 것 같지만 주소 연산자 &는 메모리 위치에 상관없이 컴파일 타임 때 값이 계산되는 연산자이기 때문에 그런 일은 발생하지 않는다.
3. C/C++에서 0이라는 수치는 숫자와 포인터에 모두 아무런 형변환 없이 적용 가능한 녀석이어서 문제이다. true, false는 이미 진작부터 예약어가 생겼는데 C++도 nil이나 null 같은 예약어가 있어야 하지 않나 싶다. 본인은 전에도 이런 언급을 한 적이 있을 것이다.
글
헤더 파일의 중복 정의 막기
출처 : http://elfinlas.tistory.com
#ifndef _MyLib_H_
#define _MyLib_H_
//Header File 기술
#endif
_MyLib_H_ 는 현재 헤더 파일에서 고유한 메크로 이름이구요.
처음 헤더 파일이 시작되면 이 메크로명이 정의되어 있지 않으므로 #ifndef 에서부터 #endif 까지의 내용이 정의되게 됩니다.
이후에도 이 파일이 인클루드 될 경우 이미 메크로가 정의되어 있기에 그 안에 들어가는 헤더파일의 정의를 무시하고 넘어가게 되는 원리입니다.
'C > C' 카테고리의 다른 글
포인터는 왜 어려울까? (0) | 2011.11.03 |
---|---|
C언어 - 긴 문자열 초기화 (0) | 2011.10.28 |
c/c++ 2차원(이차원) 배열 동적할당 방법2 (0) | 2011.10.23 |
C언어 할 때 알면 좋은 것 (0) | 2011.10.20 |
글
C언어 - 긴 문자열 초기화
EXAMPLE
char str[]="행복이라함은 성공해서 풍요롭고 여유롭게 사는것이라 생각해 왔었다.\
돈 많이 벌고, 착한 마누라랑 멋들어지게 사는거 말이다.\
사실 이렇게 되어도 행복하게될지는 알 수 없다.";
(2) " " (큰따옴표)로 묶어주기
EXAMPLE
char str[]="행복이라함은 성공해서 풍요롭고 여유롭게 사는것이라 생각해 왔었다."
"돈 많이 벌고, 착한 마누라랑 멋들어지게 사는거 말이다."
"사실 이렇게 되어도 행복하게될지는 알 수 없다.";
EXAMPLE 2
char str[]="행복이라함은 성공해서 풍요롭고 여유롭게 사는것이라 생각해 왔었다."
"돈 많이 벌고, 착한 마누라랑 멋들어지게 사는거 말이다."
"사실 이렇게 되어도 행복하게될지는 알 수 없다.";
결론
(2) 의 방법이 코드를 정렬하기에 더 좋다.
만일 (1)의 방법으로 EXAMPLE 2 와같이한다면 사이에 공백(또는 TAB 문자)가 들어가게 된다.
'C > C' 카테고리의 다른 글
포인터는 왜 어려울까? (0) | 2011.11.03 |
---|---|
헤더 파일의 중복 정의 막기 (0) | 2011.10.28 |
c/c++ 2차원(이차원) 배열 동적할당 방법2 (0) | 2011.10.23 |
C언어 할 때 알면 좋은 것 (0) | 2011.10.20 |
글
S1080 사용 후기
------------------ S1080 산지 두달 후 사용 후기
우선 배송이 너무 많이 지연되었다는 점에서는 상당히 불만이 많았다.
그래도 사은품은 잘 받았긴 했지만 그리 도움은 되지 않았고...
다만 제품만은 상당히 쓸만했다.
win 8 개발자 버젼도 설치 해보고 이것저것 실험도 해보고
여느 다른 넷북과 차이점은 없어 보이지만.. 휴대성 만큼은 점수를 크게 주고 싶다.
시야각 또한 안 좋긴하지만.. 우선 화면 보는데 크게 지장은 없으므로 패스
USB 나 인터페이스들이 잘되어 있어서 다른 패드들보단 편리한거같다.
또 다른 장점은 윈도우 운영체제라 사용하기 익숙하고 이것저것 할 수 있다는 점?
윈도우 패드는 현재? 우리나라에 많이 나와있지 않아서 관심 끌기용으로도 좋다 ㅋ
하지만 나에겐 노트북이 있는 상태이므로.. 결국엔 서브용으로도 잘 안쓰게 되는....
결론은 사용할 만하지만.. 아직도 부족한 점이 있다 정도?
만일 win 패드를 사실 분이 있다면.. 한 번 다시 고민해보시고 사시길..
(윈도우 운영체제는 터치를 위해 만들어진게 아니니.. 무언가 불편한 점이 보일것이다.(단 윈 8은 예외))
글
// 위에 있는 게 S1080 성능 ( N570 Atom 1.66g ram 2g 내장 그래픽)
// Asus K52J Series 성능 ( i5 M 450 2.40g ram 4g 그래픽 geforce 310m)
// 데스크 탑 성능 ( i7 2600 3.4GHz ram g.skill 4g 그래픽 gtx 560ti)
'C > Com' 카테고리의 다른 글
이상적인 Com? (0) | 2011.11.05 |
---|---|
S1080 사용 후기 (0) | 2011.10.28 |
글
c/c++ 2차원(이차원) 배열 동적할당 방법2
출처 : http://coden.tistory.com/10
intheight=8,width=6;
array = (int **) malloc( sizeof(int *)* height );
for( int i=0; i < height ; i++)
array[i] = (int *) malloc( sizeof(int)* width );
이런식으로 동적할당 하면 malloc를 height만큼 호출하기 때문에 행과 열이 나누어 진다.
memset으로 한번에 값을 지정할 수도 없고
할당된 메모리를 해제할경우 for문으로 height번만큼 해제해줘야 한다.
int height=8,width=6;
array = (int **) malloc( sizeof(int *)* height);
array[0] = (int *) malloc( sizeof(int) * width*height );
for( int i=1; i< height ; i++)
array[i] = array[ 0 ] + i*width;
조금더 고쳐보면..
int height=8,width=6;
array = (int **) malloc( sizeof(int *)* height);
array[0] = (int *) malloc( sizeof(int) * width*height );
for( int i=1; i< height ; i++)
array[i] = array[ i-1 ] + width;
malloc 호출을 줄일 수 있어서 시간 효율성이 좋을 듯 싶다
'C > C' 카테고리의 다른 글
포인터는 왜 어려울까? (0) | 2011.11.03 |
---|---|
헤더 파일의 중복 정의 막기 (0) | 2011.10.28 |
C언어 - 긴 문자열 초기화 (0) | 2011.10.28 |
C언어 할 때 알면 좋은 것 (0) | 2011.10.20 |