exteen ล่มบ่อย(มว๊าก!!) คาดว่า...

posted on 24 Sep 2013 12:10 by s4m3l0 in SPAM directory Diary, Idea
เนื่องจาก exteen ล่มบ่อยมาก และหลังจากนี้ผมอาจจะไม่ได้เข้ามาพักใหญ่ๆ

สำหรับคนที่มีปัญหาเรื่อง Router ต่อ Truewifi สามารถติดต่อสอบถามได้ที่ blackb1rd@riseup.net หรือ blackb1rd.mov@gmail.com ครับ

edit @ 3 Jan 2015 14:59:59 by s4m3l0

Indent style programing

posted on 24 Sep 2013 11:28 by s4m3l0 in Tech directory Tech, Knowledge, Diary
Indent style ของแต่ล่ะภาษาโปรแกรมจะไม่เหมือนกัน และอาจจะขึ้นอยู่กับหัวหน้าฝ่ายที่จะกำหนด Indent style ว่าจะใช้ space หรือ Tab ซึ่งโดยส่วนมากมักจะใช้ space 4 space "    " ในการกำหนดมากกว่า Tab
เพราะเวลาดูโค้ดในเว็บจะสามารถเห็นการแบ่งแยกที่ดีกว่า และไม่มีปัญหาเหมือน Tab
 
ตัวอย่าง indent สำหรับคนที่ยังไม่เข้าใจ
int main()
{
  <<indent 2 space
  if (TRUE)
    <<indent 4 space
}
 
แต่โดยส่วนมากมาตรฐาตรจะเป็นดังตารางข้างล่าง
C(linux) 2
C# 4
CSS Varies
GO Tabs
Haskell ?
HTML Varies
Java 4
JavaScript Varies
Lua 2
Perl 4
PHP Varies
Python 4
Ruby 2
Visual Basic 4
 
สำหรับ developer นั้นเท่าที่เห็นโครงการ Opensource ต่างในต่างประเทศเค้าจะเคร่งมากๆ แม้คนที่ส่ง patch เพื่อแก้ bug แต่ patch มี Indent style ที่ไม่สวยทาง developer ก็จะบอกให้คนที่ส่ง patch ไปแก้ Indent style ให้สวยงาม!!(อันนี้เจอมากับตัว lolz)
 
การทดสอบนี้ อาจจะขึ้นอยู่กับตัวแปรหลายอย่าง เช่น compiler,OS,version หรืออื่นๆ
การทดลองนี้ใช้ Ubunti 12.04LTS โดยใช้ gcc ในการ compile โดยไม่ได้ optimize ใดๆ
#include <stdio.h>
int main()
{
  int *pa, i, a[10];

  for (i = 0; i < 10;i++)
    a[i] = 100;
  for (pa = a; pa < a + 10; pa++)
    *pa = 100;
  return 0;
}
ใช้ gcc ทำการ compile code ออกมาเป็น assembly(AT&T) จะได้
	.file	"test.c"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	pushl	%ebp
	.cfi_def_cfa_offset 8
	.cfi_offset 5, -8
	movl	%esp, %ebp
	.cfi_def_cfa_register 5
	subl	$48, %esp
	movl	$0, -4(%ebp)
	jmp	.L2
.L3:
	movl	-4(%ebp), %eax
	movl	$100, -48(%ebp,%eax,4)
	addl	$1, -4(%ebp)
.L2:
	cmpl	$9, -4(%ebp)
	jle	.L3
	leal	-48(%ebp), %eax
	movl	%eax, -8(%ebp)
	jmp	.L4
.L5:
	movl	-8(%ebp), %eax
	movl	$100, (%eax)
	addl	$4, -8(%ebp)
.L4:
	leal	-48(%ebp), %eax
	addl	$40, %eax
	cmpl	%eax, -8(%ebp)
	jb	.L5
	movl	$0, %eax
	leave
	.cfi_restore 5
	.cfi_def_cfa 4, 4
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"
	.section	.note.GNU-stack,"",@progbits
Array
จะเห็นว่า .L2 จะเป็นการเริ่มต้นการทำงานในของลูป
for (i = 0; i < 10;i++)
จะเห็น
cmpl $9, -4(%ebp)
มีการเปรียบเทียบค่าทันที ถ้าน้อยกว่าก็จะทำการ jump ไปที่ .L3 ทันที
 
Pointer
จะเห็นว่า .L4 จะเป็นการเริ่มต้นการทำงานในของลูป  
for (pa = a; pa < a + 10; pa++)
จะเห็น
leal -48(%ebp), %eax
addl $40, %eax
cmpl %eax, -8(%ebp)
ก่อนจะมีการเปรียบเทียบค่า จะมี 2 instruction set ที่ทำงานก่อนที่จะมีการเปรียบเทียบค่า หลังจากที่เปรียบค่า ถ้าจริงก็จะ jump ไปที่ .L5 ทันที
 
สรุป
Array เร็วกว่า Pointer.

อ้างอิงจาก http://stackoverflow.com/questions/2305770/efficiency-arrays-vs-pointers

edit @ 20 Sep 2013 21:27:09 by s4m3l0