<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://rss.egloos.com/style/blog.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>Always as First</title>
	<link>http://shad0w.egloos.com</link>
	<description>2006년도에 나는 죽었다
2007년도에 나는 태어난다
2008년도에 나는 성숙한다
2009년도에 나는 완성된다

나는 그림자(shad0w)다.</description>
	<language>ko</language>
	<pubDate>Thu, 29 Oct 2009 11:09:11 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>Always as First</title>
		<url>http://pds8.egloos.com/logo/200806/22/48/f0048448.jpg</url>
		<link>http://shad0w.egloos.com</link>
		<width>80</width>
		<height>53</height>
		<description>2006년도에 나는 죽었다
2007년도에 나는 태어난다
2008년도에 나는 성숙한다
2009년도에 나는 완성된다

나는 그림자(shad0w)다.</description>
	</image>
  	<item>
		<title><![CDATA[ Undefined reference to 'vtable for 클래스 이름' ]]> </title>
		<link>http://shad0w.egloos.com/1558203</link>
		<guid>http://shad0w.egloos.com/1558203</guid>
		<description>
			<![CDATA[ 
  <br>&nbsp;Undefined reference to 'vtable for 클래스 이름'<br><br>&nbsp;<br>&nbsp;위와 같은 문제는 가상함수를 사용하고 실제 정의를 하지 않았기 때문이다.<br><br/><br/>tag : <a href="/tag/virtual" rel="tag">virtual</a>,&nbsp;<a href="/tag/가상함수" rel="tag">가상함수</a>,&nbsp;<a href="/tag/vtable" rel="tag">vtable</a>,&nbsp;<a href="/tag/undefined" rel="tag">undefined</a>			 ]]> 
		</description>
		<category>프로그래밍</category>
		<category>virtual</category>
		<category>가상함수</category>
		<category>vtable</category>
		<category>undefined</category>

		<comments>http://shad0w.egloos.com/1558203#comments</comments>
		<pubDate>Thu, 29 Oct 2009 11:09:11 GMT</pubDate>
		<dc:creator>shad0w</dc:creator>
	</item>
	<item>
		<title><![CDATA[ tcpdump 컴파일 시 ip6_print 에러 관련 ]]> </title>
		<link>http://shad0w.egloos.com/1556626</link>
		<guid>http://shad0w.egloos.com/1556626</guid>
		<description>
			<![CDATA[ 
  <br>문제 : <br># make<br>&nbsp;&nbsp;&nbsp;&nbsp; [bunch of junk]<br>print-enc.o: In function `enc_if_print':<br>print-enc.c:(.text+0xbe): undefined reference to `ip6_print'<br>collect2: ld returned 1 exit status<br>make: *** [tcpdump] Error 1<br><br><br>해결방법 :&nbsp;<br><br>&nbsp;<a href="http://mtesauro.com/livecd/index.php?title=Making_tcpdump_module">http://mtesauro.com/livecd/index.php?title=Making_tcpdump_module</a><br><br><br/><br/>tag : <a href="/tag/tcpdump" rel="tag">tcpdump</a>,&nbsp;<a href="/tag/ip6_print" rel="tag">ip6_print</a>			 ]]> 
		</description>
		<category>트러블슈팅</category>
		<category>tcpdump</category>
		<category>ip6_print</category>

		<comments>http://shad0w.egloos.com/1556626#comments</comments>
		<pubDate>Tue, 27 Oct 2009 09:20:26 GMT</pubDate>
		<dc:creator>shad0w</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 콘솔 프로그램 기본 형식 ]]> </title>
		<link>http://shad0w.egloos.com/1461697</link>
		<guid>http://shad0w.egloos.com/1461697</guid>
		<description>
			<![CDATA[ 
  <p><br>&nbsp;리눅스나 유닉스 계통 쪽에는 GUI 프로그램 보다 콘솔용 프로그램이 많지요.<br>&nbsp;요즘 들어서 우분투나 페도라에서 화려한 GUI 프로그램을 지원하고 있지만<br>&nbsp;그래도 여전히 그러한 프로그램들도 콘솔용을 지원하고 있습니다.<br><br>&nbsp;첨부파일은 리눅스에서 콘솔 프로그램을 개발할 때,<br>&nbsp;갖춰야 할 기본 형식을 작성해 두었습니다.<br><br>&nbsp;프로젝트를 진행하다가 이 포맷을 놔두면 저 또한 두고 두고 사용할 거 같아서 말이죠.<br>&nbsp;주석을 통해서 설명을 간단히 하였고요.<br><br>&nbsp;한 가지 아쉬운 점이라면 로케일 설정을 안 했다는 점인데.. 흠..<br>&nbsp;그건 제가 configure 를 자유롭게 쓰는 날에 ㅋㅋ<br><br>&nbsp;<a href="http://pds15.egloos.com/pds/200907/09/48/recuva.c">recuva.c</a><br><br>&nbsp;<br><br>&nbsp;</p><br/><br/>tag : <a href="/tag/콘솔" rel="tag">콘솔</a>,&nbsp;<a href="/tag/프로그램" rel="tag">프로그램</a>,&nbsp;<a href="/tag/getopt" rel="tag">getopt</a>,&nbsp;<a href="/tag/getopt_long" rel="tag">getopt_long</a>			 ]]> 
		</description>
		<category>프로그래밍</category>
		<category>콘솔</category>
		<category>프로그램</category>
		<category>getopt</category>
		<category>getopt_long</category>

		<comments>http://shad0w.egloos.com/1461697#comments</comments>
		<pubDate>Wed, 08 Jul 2009 16:36:37 GMT</pubDate>
		<dc:creator>shad0w</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 현재 개발중인 ext3 파일복구 프로그램(리눅스용) ]]> </title>
		<link>http://shad0w.egloos.com/1437537</link>
		<guid>http://shad0w.egloos.com/1437537</guid>
		<description>
			<![CDATA[ 
  <img class="image_left" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds15.egloos.com/pds/200906/16/48/f0048448_4a368a660c4a3.png" width="400" height="320.64" onclick="Control.Modal.openDialog(this, event, 'http://pds15.egloos.com/pds/200906/16/48/f0048448_4a368a660c4a3.png');" align="left" /><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><img class="image_left" border="0" onmouseover="this.style.cursor='pointer'" alt="" src="http://pds13.egloos.com/pds/200906/15/48/f0048448_4a360d582522a.png" width="400" height="321.951219512" onclick="Control.Modal.openDialog(this, event, 'http://pds13.egloos.com/pds/200906/15/48/f0048448_4a360d582522a.png');" align="left" /><br/><br/>tag : <a href="/tag/recuva" rel="tag">recuva</a>,&nbsp;<a href="/tag/파일복구" rel="tag">파일복구</a>,&nbsp;<a href="/tag/ext3" rel="tag">ext3</a>,&nbsp;<a href="/tag/보안삭제" rel="tag">보안삭제</a>			 ]]> 
		</description>
		<category>프로그래밍</category>
		<category>recuva</category>
		<category>파일복구</category>
		<category>ext3</category>
		<category>보안삭제</category>

		<comments>http://shad0w.egloos.com/1437537#comments</comments>
		<pubDate>Mon, 15 Jun 2009 08:59:52 GMT</pubDate>
		<dc:creator>shad0w</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [QT] QTableWidget 에서 선택된 행 얻기 ]]> </title>
		<link>http://shad0w.egloos.com/1436867</link>
		<guid>http://shad0w.egloos.com/1436867</guid>
		<description>
			<![CDATA[ 
  <br>&nbsp;QT 4.x 를 기준으로 잠시 설명하겠습니다.<br>&nbsp;<br>&nbsp;QT의 ListView가 Columns(열)을 지원해주지 않아서 다들 TreeWidget, TableWidget을 <br>&nbsp;사용하시리라 생각듭니다.<br>&nbsp;저 또한 그러한데, 이상하게 제 컴퓨터에서는 TreeWidget보다는 TableWidget이 좀더<br>&nbsp;좋은 성능을 발휘하더군요. 무튼 그래서 전 TableWidget을 사용하고 있는데<br><br>&nbsp;다중 선택(Extended Mode)에서 선택된 행(Row)을 얻어오려면&nbsp;<br>&nbsp;selectionModel() 을 사용해서 선택 모델(QItemSelectionModel)을 얻어온 후<br>&nbsp;QItemSelectionModel::selectedRows()를 사용하면 QModelIndexList를 <br>&nbsp;획득할 수 있습니다.<br>&nbsp;말이 많았는데 예제 소스를 아래 보시면 이해가 쉽습니다.<br><br>&nbsp;QModelIndexList entryList;<br>&nbsp;QModelIndex item;<br><br>&nbsp;entryList = ui.CacheTableWidget-&gt;selectionModel()-&gt;selectedRows();<br>&nbsp;item = entryList.takeFirst();<br>&nbsp;int index = item.row();<br><br>&nbsp;이런식으로 사용가능하다는 거죠..<br><br>&nbsp;참고로 QTableWidget에 selectedIndexes() 메소드도 존재하는데 이는 보호 돼 있어서<br>&nbsp;사용하지 못하네요.<br>&nbsp;(<a href="http://lists.trolltech.com/qt4-preview-feedback/2005-08/thread00108-0.html">http://lists.trolltech.com/qt4-preview-feedback/2005-08/thread00108-0.html</a>)<br><br><br/><br/>tag : <a href="/tag/qt" rel="tag">qt</a>,&nbsp;<a href="/tag/QTableWidget" rel="tag">QTableWidget</a>,&nbsp;<a href="/tag/QModelIndex" rel="tag">QModelIndex</a>,&nbsp;<a href="/tag/QModelindexList" rel="tag">QModelindexList</a>,&nbsp;<a href="/tag/QTreewidget" rel="tag">QTreewidget</a>			 ]]> 
		</description>
		<category>프로그래밍</category>
		<category>qt</category>
		<category>QTableWidget</category>
		<category>QModelIndex</category>
		<category>QModelindexList</category>
		<category>QTreewidget</category>

		<comments>http://shad0w.egloos.com/1436867#comments</comments>
		<pubDate>Sun, 14 Jun 2009 15:18:01 GMT</pubDate>
		<dc:creator>shad0w</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Qt 디자이너(.ui)파일 소스파일(.h)로 변환 ]]> </title>
		<link>http://shad0w.egloos.com/1430769</link>
		<guid>http://shad0w.egloos.com/1430769</guid>
		<description>
			<![CDATA[ 
  <br>&nbsp;QT 디자이너에 View Source 에서 저장하면 바로 해결되겠지만<br>&nbsp;그러지 못한 경우엔 UI Compiler로 해결 가능하다.<br><br>&nbsp;# uic -o recuva.h recuva.ui<br><br>&nbsp;형식으로 recuva.ui 파일을 recuva.h 파일로 변환 가능하다.<br>&nbsp;ui 파일은 내부적으로 xml 형식으로 돼 있어서 화면상의 인터페이스 위치나<br>&nbsp;크기를 저장하고 있다.<br/><br/>tag : <a href="/tag/uic" rel="tag">uic</a>,&nbsp;<a href="/tag/qt" rel="tag">qt</a>,&nbsp;<a href="/tag/변환" rel="tag">변환</a>,&nbsp;<a href="/tag/디자이너파일" rel="tag">디자이너파일</a>,&nbsp;<a href="/tag/헤더파일" rel="tag">헤더파일</a>			 ]]> 
		</description>
		<category>프로그래밍</category>
		<category>uic</category>
		<category>qt</category>
		<category>변환</category>
		<category>디자이너파일</category>
		<category>헤더파일</category>

		<comments>http://shad0w.egloos.com/1430769#comments</comments>
		<pubDate>Mon, 08 Jun 2009 17:07:49 GMT</pubDate>
		<dc:creator>shad0w</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 그저 생각나는대로.... ]]> </title>
		<link>http://shad0w.egloos.com/1418182</link>
		<guid>http://shad0w.egloos.com/1418182</guid>
		<description>
			<![CDATA[ 
  &nbsp;저 또한 오늘 친구들과 함께 분양소를 찾으려 했는데, <p>&nbsp;게시판에 올라오는 글들이 사실이라면 안 될 거 같습니다. </p><p>&nbsp;</p><p>&nbsp;요즘 여러가지 매체를 통해 노무현 전 대통령에 대한 글들을 수 없이</p><p>&nbsp;접하고 있으면서 제 개인적인 생각을 정리하고 있지만...</p><p>&nbsp;</p><p>&nbsp;아무리 생각해도... 정말 우리들은 대인을 잃은 것 같습니다..</p><p>&nbsp;이 아저씨가 재임 기간 정책들이야 잘 된 것이 있고, 못 된 것이 있을 수 있는데..</p><p>&nbsp;그거야 의견이 분분할테고, 더 이상&nbsp;가릴 이유도 없을 겁니다.</p><p>&nbsp;</p><p>&nbsp;하지만, 아저씨가 꿈꿔 왔던 세상은 현실에서 이상을 만드는 것이었습니다. <p>&nbsp;우리들은 현실을 알아라. 현실을 직시하라 라는 말을 많이 하곤 합니다. <p>&nbsp;하지만, 우리가 바라볼 것은 현실이 아닌 이상이어야 한다고 생각합니다. <p>&nbsp; <p>&nbsp;이상을 쫒아가려고 아무리 애를써도, 어려운 판에.. <p>&nbsp;이상은 일찌감치 포기하고 현실을 쫒아 간다고 생각해보십시오.. <p>&nbsp;생각만 해도 아찔하고 두렵기만 합니다. <p>&nbsp; <p>&nbsp;어떻게 보면, 대통령이라는 직책은 이 아저씨에겐 어울리지 않을 수도 <p>&nbsp;있습니다. 권력을 싫어하며, 불의와 타협하지 않은 걸로 봐선 말이죠.. <p>&nbsp;그래서 권력을 나눌려고 했고, 그러다 보니 청와대 자체가 권력이 <p>&nbsp;없어졌으니 모두들 청와대를 쉽게 봤을 수도 있을 것입니다. <p>&nbsp; <p>&nbsp;그렇지만, 이게 사실은 아니더라도 진실은 되어야 하지 않을까 생각합니다. <p>&nbsp;진실은 그렇게 되어야... 그렇게 되고나서도 청와대를 쉽게 보지 않고 <p>&nbsp;모든 것이 물 흐르듯이 잘 흘러가는... 그게 진실이 아닐까 합니다. <p>&nbsp;사실은 진실 건너편에 있을지라도&nbsp;말이죠... <p>&nbsp; <p>&nbsp;정말 못 참겠는 것이 하나 있습니다. <p>&nbsp;아저씨가 돌아가신 지금 인터넷에서 일명 보수 논객으로 불리는 사람들이 <p>&nbsp;국민장을 치르는 것과 추모하는 것 자살하는 것에 대해서 곱지 않은 시선을 <p>&nbsp;보내고 있다고 합니다... <p>&nbsp; <p>&nbsp;얼마나 자신은 떳떳하고 절대적으로 정의적이고 객관적이며, 찔러도 <p>&nbsp;피 한 방울 나오지 않은 것 처럼 얘기를 하는지... <p>&nbsp;얼마나 자신에 대한 신뢰가 넘쳤으면&nbsp;굳이 안 해도 되는 내용을 시기가 <p>&nbsp;상조한대도 불구하고 웹에 남겼어야 했을까요.. <p>&nbsp;사람이 죽었는데도 말이죠.. 욕 먹을 것을 알면서도 말이죠... <p>&nbsp; <p>&nbsp;대부분 그러한 이유가 죄 지은 자가 죽었는데 왜 그렇냐는 이유더군요. <p>&nbsp;휴.. 이 사람들은 감성과 감정... 이성이 부족한가 봅니다. <p>&nbsp;사람이란 말이죠.. 관계와 관계 속에 엮여 진다고 봅니다. <p>&nbsp; <p>&nbsp;대통령과 국민, 사장과 직원.. 선생님과 제자.. 야당 여당... <p>&nbsp;이들의 관계.. 즉 조직, 직책.. 이 굴레를 벗는다면 어떻게 될까요..? <p>&nbsp;모두가 평등해집니다... 만인이 평등해지는 것이지요.. <p>&nbsp; <p>&nbsp;그 굴레는 벗는 순간이 죽음을 맞이하는 순간입니다. <p>&nbsp;모든 직책이나 책임의 짐에서 벗어나는 죽음 앞에서 살아 생전의 <p>&nbsp;그 무엇이 뭐가 중요한 것인가 말입니다. <p>&nbsp; <p>&nbsp;아저씨가 그 보수 논객들을 때리기라도 했나요? 죽였나요? <p>&nbsp;무엇 때문에 그들은 매체의 주목을 받고 싶어서 시기 상조인 시기에 <p>&nbsp;그러한 줄 모르겠습니다. <p>&nbsp;모 아나운서의 말대로 '듣도 보지도 못했는 사람'이 갑자기 나타나 <p>&nbsp;초를 치는 게 아닌지 모르겠습니다. <p>&nbsp; <p>&nbsp;자신의 부모가 죄를 짓고 죽었는데도 그러한 논평을 쓸 수 있다면 <p>&nbsp;저는 현재 떠도는 보수 논객들을 인정하겠습니다. <p>&nbsp;하지만 그들이 그렇지 못하다면 지금이라도 아저씨의 명복을 비는 게 <p>&nbsp;죽은 사람의 도리이고, 산 사람의 도리가 아닌가 합니다. <p>&nbsp; <p>&nbsp;제 글이 잠시 한 쪽으로 빗나간 거 같은데요. <p>&nbsp;정말 저는 그렇게 생각합니다. <p>&nbsp;아저씨.. 아저씨 같은 사람 또 없습니다... <p>&nbsp;국민을 대통령으로 섬겼던 사람인데... <p>&nbsp;우리 국민들이 그 직무를 제대로 이행하지 못한 거 같습니다.. <p>&nbsp; <p>&nbsp;부끄럽습니다... 말 하진 못하지만 <p>&nbsp;이 사건 발생 후 뭔가 마음 한 구석이 찜찜한 그 사람들이.... <p>&nbsp;정말로 부끄럽습니다. <p>&nbsp; <p>&nbsp;권력... <p>&nbsp;그것은 아무것도 아닙니다. <p>&nbsp;그 조직을 벗어나면 그것은 정말 아무것도 아닙니다. <p>&nbsp; <p>&nbsp;회사를 나오면 벌벌 떨던 사장도 아무 것도 아닙니다. <p>&nbsp;군대를 전역하면 벌벌 떨던 장군도 아무 것도 아닙니다. <p>&nbsp;학교를 졸업하면 벌벌 떨던 총장도 아무 것도 아닙니다. <p>&nbsp;대한민국 국민이 아니면 벌벌 떨던 대통령도 아무 것도 아닙니다. <p>&nbsp; <p>&nbsp;그 조직을 벗어나면 우리는 정말로 상하 관계가 아닌 <p>&nbsp;수평 관계가 돼 버립니다. <p>&nbsp; <p>&nbsp;그래서 권력을 가진 자들이 좀 더 신중하고 자신을 낮춰야 하지 않나 <p>&nbsp;생각합니다. 노무현 아저씨 처럼 말입니다... <p>&nbsp;물론 제가 직접 경험하고 들어보진 못해서 사실이 아닐 수도 있으나 <p>&nbsp;저는 지금은 믿습니다. 그렇다고 노사모도 아니고.. <p>&nbsp; <p>&nbsp;그리고 보면 노사모나 봉화주민 중에 조문을 거부한 것은 아닌 거 <p>&nbsp;같습니다. 아저씨가 원하는 것도 아니고, 예우에서 벗어난 행동이 <p>&nbsp;아닐까 합니다. <p>&nbsp; <p>&nbsp;우리들은 정치에 관심을 가져야 합니다. <p>&nbsp;그래야 우리들의 권리를 찾을 수 있습니다.. <p>&nbsp;이젠... 그래야 합니다... <p>&nbsp; <p>&nbsp;마지막으로 교내 분향소.. <p>&nbsp;부디 몇 일 남지 않은 동안 잘 운영 되었으면 합니다. <p>&nbsp;저는 울음은 나지 않네요.. 그저 마음 한 구석이 허전합니다. <p>&nbsp;사람사는 세상... 그리울 겁니다... <p>&nbsp;</p><br/><br/>tag : <a href="/tag/노무현" rel="tag">노무현</a>,&nbsp;<a href="/tag/아저씨" rel="tag">아저씨</a>			 ]]> 
		</description>
		<category>이런저런이야기</category>
		<category>노무현</category>
		<category>아저씨</category>

		<comments>http://shad0w.egloos.com/1418182#comments</comments>
		<pubDate>Wed, 27 May 2009 16:24:10 GMT</pubDate>
		<dc:creator>shad0w</dc:creator>
	</item>
	<item>
		<title><![CDATA[ LCD 삽니다. ]]> </title>
		<link>http://shad0w.egloos.com/1417821</link>
		<guid>http://shad0w.egloos.com/1417821</guid>
		<description>
			<![CDATA[ 
  <br>&nbsp;LCD 모니터 17인치 정도로 중고로 사려고합니다.<br><br>&nbsp;혹시 파실 분 계시면 연락주세요!<br><br>&nbsp;물론 가격은 저렴하게~^^<br><br>&nbsp;010-2885-7357<br/><br/>tag : <a href="/tag/중고" rel="tag">중고</a>,&nbsp;<a href="/tag/모니터" rel="tag">모니터</a>,&nbsp;<a href="/tag/LCD" rel="tag">LCD</a>,&nbsp;<a href="/tag/삽니다" rel="tag">삽니다</a>			 ]]> 
		</description>
		<category>미분류</category>
		<category>중고</category>
		<category>모니터</category>
		<category>LCD</category>
		<category>삽니다</category>

		<comments>http://shad0w.egloos.com/1417821#comments</comments>
		<pubDate>Wed, 27 May 2009 11:24:11 GMT</pubDate>
		<dc:creator>shad0w</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 노무현 형님... ]]> </title>
		<link>http://shad0w.egloos.com/1416613</link>
		<guid>http://shad0w.egloos.com/1416613</guid>
		<description>
			<![CDATA[ 
  <br>&nbsp;노무현 형님이 돌아가셨다...<br>&nbsp;이 형님에 대해 여러가지 말이 많다...<br>&nbsp;<br>&nbsp;모든 것을 각설하고..<br>&nbsp;대통령으로 재직하면서 여러가지 정책에 대해선 잘잘못을 따질 수 있다보면<br>&nbsp;결과적으로 보면 잘된 부분도 있고 잘못된 부분도 있다고 본다.<br>&nbsp;모든&nbsp;걸 잘 할 수 없지는 않은가...<br>&nbsp;무튼 간에... 하지만 그러한 것은 역사가 평가할 것이고<br><br>&nbsp;내가 지금 하고 싶은 말은..<br>&nbsp;노 아저씨를 직책의 둘레를 벗고, 인간대 인간으로 봤을 때이다.<br>&nbsp;이 아저씨는 정말 인간적으며, 강자에게 강하게 약자에겐 고개를 숙였다.<br>&nbsp;서민에게 좀 더 다가가고... <br><br>&nbsp;아저씨, 할아버지처럼...<br>&nbsp;대통령이라는 것이 권위주의에 최고 상징이기 보단<br>&nbsp;국민을 섬기고 국민을 대통령으로 모시는..<br>&nbsp;그러한 것을 추구하신 분이다...<br><br>&nbsp;인터넷에서 떠도는 여러 사진들을 보아라..<br>&nbsp;어느 국가 원수가 저러고 있다던가...<br>&nbsp;가식은 없고, 순수함만이 묻어있다..<br><br>&nbsp;또한 죽은 마당에 서거가 아니라 자살이라고 따지는 것은 또한 무엇인가?<br>&nbsp;자신은 그토록 객관적이며, 정의적으며, 찔러도 피 한 방울 안 나오는 사람이던가?<br>&nbsp;<br>&nbsp;사람이 죽었다는데, 그럼 모든 허물을 벗고, 사람과 사람으로 봐야 되는 것이 아니던가<br>&nbsp;노사모 회원 중에 조문을 막은 것도 그렇다..<br>&nbsp;그건 아니라고 본다. <br>&nbsp;사람이 죽었는데... 막은들 무엇 하리요.. 아무리 악 감정이 있어도<br>&nbsp;조문은 하게 해야지 죽은 사람의 도리이고, 산 사람의 도리 아니던가?<br><br>&nbsp;사람과 사람은 모두 구성원의 관계로 엮여져 있다.<br>&nbsp;대통령과 국민, 사장과 직원, 선생님과 제자..<br>&nbsp;하지만 사람이 죽으면.. 이 모든 것을 벗겨져야 한다..<br><br>&nbsp;그저 사람과 사람.. 인간 과 인간의 관계로..<br>&nbsp;그럼 모두가 평등할 것이다....<br><br>&nbsp;부디 하늘에 가셔서 편히 쉬십시오...<br/><br/>tag : <a href="/tag/노무현" rel="tag">노무현</a>			 ]]> 
		</description>
		<category>일상생활</category>
		<category>노무현</category>

		<comments>http://shad0w.egloos.com/1416613#comments</comments>
		<pubDate>Tue, 26 May 2009 16:11:20 GMT</pubDate>
		<dc:creator>shad0w</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [리눅스] likely()/unlinkely() 함수 ]]> </title>
		<link>http://shad0w.egloos.com/1399463</link>
		<guid>http://shad0w.egloos.com/1399463</guid>
		<description>
			<![CDATA[ 
  <br>&nbsp;리눅스 커널 소스를 보다 보면 분기문(if)문에 linkely()/unlikely()함수가 사용되는 것을<br>&nbsp;볼 수 있을 것이다. 이는 성능향상을 꾀하려고 나온 방법인데..<br><br>&nbsp;정확한 명칭은 Branch Prediction 이라고 하며, 컴파일러에게 정보를 줘서 좀 더<br>&nbsp;효율적인 코드를 만들게끔 한다.<br>&nbsp;if( expr ) 에서 expr이 참(true)일 확률이 높으면 if( likely(expr) )를 사용하면 되고<br>&nbsp;거짓(false)일 확률이 높으면 if( unlikely(expr) )를 사용하면 된다.<br><br>&nbsp;이 경우 기존 브랜치 문으로 인해 CPU의 파이프라인이 깨지는 것을 방지할 수 있다.<br>&nbsp;이는 어디까지는 GCC 3.0 이상에서만 지원된다.<br><br><span style="FONT-SIZE: 100%">이호 wrote:<br>&gt;<br>&gt;첫손님이라 빨리 답변을 자세하게 드리죠~~ :)<br>&gt;<br>&gt;이런 것에 관심을 가지시는 분이 있네요. 이건 branch prediction에<br>&gt;관련된 것입니다. gcc 3.0부터인가 branch prediction에 관련된 <br>&gt;builtin 함수들이 추가가 되었는데, likely()나 unlikely()는 <br>&gt;gcc 3.0 이상에서만 의미를 갖습니다.<br>&gt;<br>&gt;branch prediction에 대해서 조금 설명을 드리면. CPU가 명령어를<br>&gt;실행할 때 pipeline이라는 것이 있습니다. 하나의 명령어을 실행하는<br>&gt;과정을 3단계나 5단계로 나눌 수 있는데, 여러개의 명령어를 이어서<br>&gt;실행할 때 여러 명령어가 pipeline의 다른 위치에서 다른 단계를<br>&gt;거치게 됩니다. 즉 하나의 명령어를 가져와서 해석하고 실행하고 <br>&gt;결과를 저장한 후 다음 명령을 가져와 실행하는 것이 아니라, 하나의<br>&gt;명령어를 실행하고 있을 때 이미 다음 명령어를 가져와서 해석하고<br>&gt;있고, 바로 앞에 실행한 명령어를 결과를 저장하는 것입니다. 이렇게<br>&gt;하면 이어진 명령어를 훨씬 빠른 시간에 처리할 수 있게 됩니다. <br>&gt;그런데 if()문 등으로 인해 다른 코드로 건너뛰게 되는 경우 <br>&gt;pipeline의 효과를 별로 보지 못하게 됩니다. 다른 코드로 건너 뛰면<br>&gt;pipeline을 다시 비워야 하기 때문이죠. 또한 이는 같은 cacheline에<br>&gt;없을 가능성이 높기 때문에 cache에 명령어를 다시 가져와야할 수도 <br>&gt;있습니다. 이런 이유로 branch가 생기면 처리 속도가 저하가 됩니다.<br>&gt;그렇다고 branch를 막을 수는 없기 때문에 대신 branch를 줄이는 것이<br>&gt;좋습니다. 그리고 branch는 크게 두가지로 나눠볼 수 있습니다. 하나는<br>&gt;conditional branch이고 다른 하나는 그냥 jump입니다. 앞의 경우는<br>&gt;앞의 연산의 결과에 따라서 branch 여부가 정해지는 것이고, 뒤의 것은<br>&gt;그냥 다른 곳으로 뛰는 것입니다. 뒤의 경우는 CPU가 이미 예측이 가능하기<br>&gt;때문에 미리 준비할 수 있지만 앞의 경우는 그 명령어를 닥치기 전에 <br>&gt;알 수 가 없습니다. CPU에 따라서는 branch prediction을 해보려고<br>&gt;하지만 완벽할 수가 없죠. 그래서 프로그래머가 주로 어느쪽으로 branch가<br>&gt;일어날 것인지 예상할 수 있다면 그에 대한 정보를 컴파일러에게 줘서 <br>&gt;효율적인 코드를 만들어내게 하는 것입니다.<br>&gt;<br>&gt;그럼 간단한 예를 보겠습니다.<br>&gt;<br>&gt;if (expr)<br>&gt; &nbsp;A<br>&gt;or <br>&gt; &nbsp;B<br>&gt;C<br>&gt;<br>&gt;이런 코드가 있다면 컴파일러는<br>&gt;<br>&gt;expr 계산<br>&gt;jump to B if false<br>&gt;A<br>&gt;jump C <br>&gt;B<br>&gt;C<br>&gt;<br>&gt;이런 코드도 만들 수 있고, 아니면<br>&gt;<br>&gt;expr 계산<br>&gt;jump to A if true<br>&gt;B<br>&gt;jump C <br>&gt;A<br>&gt;C<br>&gt;<br>&gt;이런 코드도 만들 수 있습니다. 만약 expr이 참일 경우가 많다면<br>&gt;앞의 코드가, 거짓일 경우가 많다면 뒤의 코드가 더 효율적이 됩니다.<br>&gt;그래서 코드를 작성할 때 확률적으로 if(expr)의 expr이 참일<br>&gt;확률이 월등이 높으면 likely()를, 거짓이 확률이 높으면 unlikely()를<br>&gt;써서 컴파일러가 효율적으로 코드를 생성하도록 도와주는 것입니다.</span><br><br/><br/>tag : <a href="/tag/likely" rel="tag">likely</a>,&nbsp;<a href="/tag/unlikely" rel="tag">unlikely</a>,&nbsp;<a href="/tag/branchprediction" rel="tag">branchprediction</a>,&nbsp;<a href="/tag/kernel" rel="tag">kernel</a>			 ]]> 
		</description>
		<category>프로그래밍</category>
		<category>likely</category>
		<category>unlikely</category>
		<category>branchprediction</category>
		<category>kernel</category>

		<comments>http://shad0w.egloos.com/1399463#comments</comments>
		<pubDate>Sun, 10 May 2009 14:49:45 GMT</pubDate>
		<dc:creator>shad0w</dc:creator>
	</item>
</channel>
</rss>
