Archive

Author Archive

Hello World… !

หวัดดีกับ blog ว่างๆ นานมากแล้วที่ไม่ได้มีเพิ่มเติมเนื้อหา วันเวลาผ่านไปรวดเร็วหลายๆ อย่างก็ผ่านไป จนวันนี้ Visual Stuidio 2019 แล้ว  ช่วงนี้เป็นช่วง X-mas ของปี 2019 ประสบการณ์ที่ผ่านไปหลายปีในเรื่องโปรแกรมมิ่ง ก็ขาดตอนไปมีสิ่งที่ตื่นเต้นน่าสนใจเขามาแทนที่ หลายปีมานี่ผมได้มีโอกาสงานอยู่ในโครงการเกี่ยวกับอากาศยานไร้คนขับของสถาบันที่ผมทำงานอยู่ เริ่มจากความชอบในการเล่นเครื่องบินบังคับ หรือพูดให้โก้เก้ ตามฝรั่ง ก็ เรียกว่า RC-Model ความหลงไหลพาผมเข้าไปสู่นักบิน UAV อืมฟังแล้วประหลาดเมื่อหลายปีก่อนไม่มีใครเขารู้จักกันหรอก ครับ จนเมื่อ 2-3 ปีมานี่ ส่วนที่ทำออกมาเป็นการค้า พี่ผู้คนมากมายนำไปใช้ในงานแล้วก็พากันเรียกมันว่า Drone คำนี้ มายังไงผมก็ไม่ทราบได้ แต่พอเรียกคำนี้ก็เป็นอันรู้กัน แต่ผู้คนก็มักจะรู้จักกันในรูปร่างหน้าตาแบบด้านล่างนี้

Unknown       Phantom 4 Advanced drone de cuatro helices 4k

ครับแบบนี้เราเรียกันว่าโดรน หรือ Drone ก็แล้วแต่ ในมุมมองของนักพัฒนา UAV อย่างพวกเราๆ ก็เรียกมันว่า มัลติโรเตอร์หรือแบบเจาะจงลงไปเลยก็คือ Quad Rotor คือมันมีใบพัดที่หมุนได้ถึง 4 ใบครับ เวลามันจะขึ้นมันก็หมุน พอใบพัดหมุนได้ความเร็วรอบระดับหนึ่งมันก็ลอยขึ้นฟ้า คนบังคับได้ ซ้าย ขวา หน้า หลัง ติดกล้องความระเอียดสูงไปด้วย ส่งภาพลงมาใสกระจ่างชัดเจน ก็เอามาทำประโยชน์กันไปตามแต่จะใช้กัน เล่าไปเล่ามามันก็เลอะเทอะมาถึงนี่ได้อย่างไรก็ไม่รู้  แต่ที่ผมทำมันไม่ใช่แบบนี้หรอกครับวันหลังจะเล่าให้ฟัง ไม่รู้จะมีใครอ่านหรือป่าว ฮะฮะ พูดไปเรื่อยเปื่อย แต่เราเป็นคนเขียนโปรแกรม หรือเขามักจะเรียกกันว่าโปรแกรมเมอร์ มีคำกล่าวว่า  ” After three days without programming , life becomes meaningless ” จริงแท้แน่นอน ครับในมุมหนึ่งของพวกเราเป็นโลกส่วนตัวที่ยากจะเข้าใจ เพราะไม่รู้จะบอกอย่างไรให้ใครเข้าใจ ฮิ ฮิ งง งง

ว่าจะพูดเรื่องอะไรก็ไม่รู้ วันนี้นั่งชั่งใจว่าจะดำเนิน Blog นี้ต่อไปหรือปิดลง ใจหนึ่งก็เสียดายที่ยังมีคนมาอ่านของเราอยู่พอสมควรก็เลยคืดคำนึงต่อไปว่า น่าจะเป็นการดีที่หากเราจะทำมันต่อไปอาจไม่ได้มีอะไรดีสักเท่าไรหรือเป็นประโยชน์กับพี่น้อง โปรแกรมเมอร์มากมายนักก็ทำไปเหอะ ดีกว่า นั่งดกาตูดเกาก้นไปวัน ๆ

เอาไว้ติดตามกันละกันนะครับมีเรื่องอะไรอีกมากมายอยากเขียนให้ คนที่อาจหลงทางมาอ่าน blog กะผม

11705361_10204014564630818_4046123318596827966_n

 

Categories: C# .NET

ว่าด้วยเรื่อง Memory Static , Stack , Heap ในมุมของโปรแกรมเมอร์

การเป็นโปรแกรมเมอร์ที่ดี นั้นจำเป็นจะต้องเข้าใจ “What goes where” หรือ อะไรไปทางไหน ครับสิ่งที่จะกล่าวนั้น อยู่บนพื้นฐานการใช้งาน Memory ของ C programming  เพื่อให้การเขียนโปรแกรมเป็นไปได้อย่างมีประสิทธิภาพสูงสุด ในบทความนี้ก็เลยจะพูดถึง Memory ที่ถูกใช้งานระหว่างการเขียนโปรแกรม ครับ

( ในบทความนี้ อยู่บนพื้นฐานของ C programming นะครับ )

ใน C programming นั้นจะมีการใช้ Memory อยู่ 3 ชนิดคือ

  • static : เก็บค่าตัวแปรชนิด global  ซึ่งจะอยุ่ฐาวรจนกว่าจะจบโปรแกรม
  • stack : เก็บค่าตัวแปรที่เป็น local หรือตัวแปรที่ประกาศใน function
  • heap : dynamic storage (เป็นพื้นที่ความจำขนาดใหญ่การแบ่งใช้ไม่เป็นลำดับ) 


picture form https://craftofcoding.wordpress.com

STATIC Memory

จากที่ได้กล่าวไว้ตั้งแต่เบื้องต้นนะครับ  static memory จะอยู่ถาวรจนกว่าจะจบโปรแกรม ซึ่งโดยมากจะใช้เก็บค่าตัวแปร global หรือ ตัวแปรที่ประกาศนำด้วย static เช่น

int val ;

ในหลายๆ ระบบ ตัวแปรนี้จะใช้พื้นที่ในหน่วยความจำ จำนวน 4 bytes  หน่วยความจำดังกล่าวนี้อาจมาได้จาก 2 ที่  ถ้า ตัวแปรนี้ประกาศ นอก function ก็จะพิจารณาว่าเป็น global  หมายถึง สามารถเข้าถึงจากที่ไหนก็ได้ในโปรแกรม  และ ตัวแปร global  เป็น static ซึ่งมีชุดเดียวตลอดในโปรแกรม

ตัวแปรใน function เป็น local  ซึ่งจะใช้พื้นที่ของ stack แต่ก็สามารถที่จะบังคับให้เป็น ตัวแปร static ได้โดยการนำหน้าด้วย static cluse. เช่นตัวแปรตัวเดียวกันหากประกาศใน function แต่ถ้านำหน้าด้วย static ก็จะทำให้ถูก ใช้ในพื้นที่ ใน static memory ได้

static int val;

STACK MEMORY

หน่วยความจำstack ใช้เก็บค่าตัวแปรใช้ภายใน function (รวมถึงใน main() function ด้วย )   หน่วยความจำ stack มีโครงสร้างเป็นแบบ LIFO “Last-In-First-Out” ทุกครั้งที่มีการประกาศตัวแปรใน function 9 ตัวแปรจะถูก Push ลงบนstack และเมื่อ function นั้นจบการทำงานตัวแปรทั้งหมด ที่อยู่ใน function จะถูกลบออกและหน่วยความจำนั้นก็จะว่างลง

Stack เป็นพื้นที่ของ หน่วยความจำที่พิเศษ ถูกจัดการด้วย CPU ดังนั้นเราไม่จำเป็นจะต้องทำการ จอง (allocate) หรือ คืน (deallocate) พื้นที่หน่วยความจำ

Stack ถูกแบ่งออกเป็น frame ต่อเนื่องกัน ในขณะที่ function ถูกเรียกนั้น stack frame ใหม่ จะถูก จองใช้งาน

ข้อจำกัดของขนาดของหน่วยความจำ stack นั้นแตกต่างกันไปตาม OS (เช่น OSX มีขนาด stack เท่ากับ  8MB) ถ้าโปรแกรม พยายามใช้ stack มากเกินไป จะเกิด stack overflow ซึ่งก็หมายถึง หน่วยความจำ stack ถูกจองใช้หมด  นอกจากนี้การ เขียน recursion ที่ไม่ถูกต้องก็เป็นอีกสาเหตุที่ทำให้ เกิด stack overflow ด้วย

บทสรุปของ stack

  • หน่วยความจำ stack ถูกจัดการโดย CPU ไม่สามารถเข้าไปแก้ไขได้
  • ตัวแปรถูกจองและคืนพื้นที่อัตโนมัติ
  • พื้นที่หน่วยความจำ stack มีจำกัด – ส่วนมากจะถูกกำหนด upper bound
  • stack ขยายและลดขนาดในขณะที่สร้างตัวแปรและลบตัวแปรไป
  • ตัวแปร stack จะปรากฏก็ต่อเมื่อ function ที่สร้างมันยังคงอยู่

HEAP Memory

เป็นพื้นที่สำหรับการเรียกใช้แบบ dynamic ตรงข้ามกับการใช้งานแบบ stack  หรือเรียกอีกอย่างหนึ่งว่า “free store “ ผู้ใช้เป็นผู้ใช้ จองใช้งานเองไม่ได้ใช้งานแบบ อัตโนมัติ โดย function เช่น malloc() และคืน เช่น free()   การพยายาม free() หน่วยความจำขณะถูกใช้งานอยู่ทำให้การ คืน memory ล้มเหลวและทำให้เกิด memory leak  ทำให้ process อื่น ไม่สามารถจิงใช้งานได้

เรื่อง ขนาดของ HEAP  นั้นค่อนข้างจะไม่จำกัด ซึ่งขึ้นอยู่กับ physical memory และตัวแปรที่ สร้างใน heap สามารถเข้าถึงได้จากทุกที่ในโปรแกรม และ heap memory นี่เองที่เราจะต้องใช้ pointers

บทสรุปของ HEAP

  • หน่วยความจำ HEAP จัดการโดยผู้ใช้ไม่มีขอบเขตในการเข้าถึง
  • ใน C ตัวแปรถูกจองและคืนโดยใช้ function เช่น malloc() และ free()
  • HEAP เป็นส่วนของหน่วยความจำขนาดใหญ่และถูกจำกัดโดย physical memory
  • HEAP เข้าถึงด้วยการใช้ pointer

ตัวอย่าง ของการใช้ memory

ลองพิจารณา code ต่อไปนี้ครับ

picture form https://craftofcoding.wordpress.com

ตัวแปร x เป็น static เพราะว่า เป็นการประกาศแบบ global

ตัวแปร y และ str เป็น stack ซึ่งจะถูกคืนพื้นที่เมื่อโปรแกรมจบ

function malloc() นั้นใช้สำหรับการจองพื้นที่ 100 ช่อง ของ หน่วยความจำ heap แต่ละช่องมีขนาดตาม size ของ char  ให้กับตัวแปร str

function free() สำหรับคืนพื้นที่ ที่ ชี้โดย str

picture form https://craftofcoding.wordpress.com

เป็นไงกันบ้างครับ ทั้งหมดนี้เป็น แนวคิดการใช้งาน พื้นที่หน่วยความจำของตัวแปรแต่ละประเภท สหรับโปรแกรมเมอร์ควรจะต้องเข้าใจกันสักนิสหนึ่ง ผมมั่นใจว่า เราเคยเจอ stack overflow และ memory leak กันเป็นประจำอยู่แล้วในงานการพัฒนาโปรแกรม เกร็ดเล็กเกร็กน้อยช่วยเราให้สามารถหาข้อมูลแก้ไขต่อไปได้ ครับ

Categories: C++

NEWS: Northrop Grumman Confirms US Navy MQ-8C Fire Scout Order! — dragonsdrones

Northrop Grumman Corporation is set to build 10 additional MQ-8C Fire Scout unmanned helicopters for the U. S. Navy, giving maritime commanders persistent, real-time intelligence, surveillance and reconnaissance (ISR). The additional build will bring the total number of MQ-8C Fire Scout air vehicles procured to 29, extending the range and endurance of naval operations. […]

via NEWS: Northrop Grumman Confirms US Navy MQ-8C Fire Scout Order! — dragonsdrones

Categories: C# .NET

NEWS: Lockheed Martin Conducts First Underwater Unmanned Aircraft Launch from Unmanned Underwater Vehicle! — dragonsdrones

Lockheed Martin has successfully launched Vector Hawk, a small, unmanned aerial vehicle (UAV), on command from the Marlin MK2 autonomous underwater vehicle (AUV) during a cross-domain command and control event hosted by the U.S. Navy. In addition to Marlin and Vector Hawk, the Submaran, an unmanned surface vehicle (USV) developed by Ocean Aero, provided […]

via NEWS: Lockheed Martin Conducts First Underwater Unmanned Aircraft Launch from Unmanned Underwater Vehicle! — dragonsdrones

Categories: C# .NET

NEWS: Zipline looking for pilots US and Rwanda!

 Half moon based drone delivery company Zipline have several openings, not just for pilots but maintenance, development and logistics. The company aims to parachute packets into remote places …

Source: NEWS: Zipline looking for pilots US and Rwanda!

Categories: C# .NET