คำถามติดแท็ก low-level

คำถามเกี่ยวกับระบบในระดับต่ำ: การเขียนโปรแกรมใกล้เคียงกับรายละเอียดและฮาร์ดแวร์

2
คุณจะจัดการกับความเข้าใจที่เป็นนามธรรมในรหัสได้อย่างไร
เมื่อดูที่ codebase ใหม่ฉันต้องการเริ่มจากล่างขึ้นบน ที่ฉันเข้าใจหนึ่งไฟล์แล้วเลื่อนขึ้นไปที่นามธรรมถัดไป แต่บ่อยครั้งที่ฉันพบว่าตัวเองลืมสิ่งที่เป็นนามธรรมในระดับต่ำกว่าทำ ดังนั้นฉันจะมาถึงจุดนี้ที่ฉันพบว่าตัวเองกำลังวนกลับไปสู่ไฟล์ที่ฉันเคยเข้าใจมาก่อนแล้วจึงพยายามที่จะเรียนรู้มันใหม่ ในขณะที่พยายามที่จะเล่นปาหี่ abstractions อื่น ๆ ที่เชื่อมต่อซึ่งกันและกันในหัวของฉัน มีกลยุทธ์ที่ดีกว่าสำหรับการรับมือกับสถานการณ์นี้หรือไม่? ฉันควรลืมเกี่ยวกับรายละเอียดระดับต่ำกว่าและนำพวกเขาตามที่กำหนด? แต่ถึงอย่างนั้นหลายครั้งก็จำเป็นต้องมีความเข้าใจก่อนหน้าเกี่ยวกับสิ่งที่เป็นนามธรรมในระดับต่ำกว่าเพื่อให้เข้าใจสิ่งที่เป็นนามธรรมในปัจจุบัน

8
วิศวกรรมย้อนกลับ: เป็นสิ่งที่ดีจริงๆ? [ปิด]
เป็นการยากที่จะบอกสิ่งที่ถูกถามที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือโวหารและไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันมีคำถามที่ไร้เดียงสา / มือใหม่: วิศวกรรมย้อนกลับดีอย่างไร ในฐานะโปรแกรมเมอร์ฉันควรเรียนรู้ศิลปะของวิศวกรรมย้อนกลับหรือไม่ โปรแกรมเมอร์ที่ได้รับผลประโยชน์มีประโยชน์อะไรบ้าง?

7
อะไรคือข้อดี / ข้อเสียของการใช้ C แทนชุดประกอบ? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ตอนนี้ฉันกำลังเรียนวิศวกรรมในสาขาโทรคมนาคมและอิเล็กทรอนิกส์และเราได้ย้ายจากแอสเซมเบลอร์ไปที่ C ในการเขียนโปรแกรมไมโครโปรเซสเซอร์ ฉันสงสัยว่านี่เป็นความคิดที่ดี อะไรคือข้อดีและข้อเสียของ C เมื่อเทียบกับการประกอบ? ข้อดี / ข้อเสียที่ฉันเห็นคือ: ข้อดี: ฉันสามารถบอกได้ว่าไวยากรณ์ C นั้นง่ายกว่าการเรียนรู้มากกว่า Assembler ไวยากรณ์ C ใช้งานง่ายขึ้นสำหรับการสร้างโปรแกรมที่ซับซ้อนมากขึ้น การเรียนรู้ C นั้นมีประสิทธิภาพมากกว่าการเรียนรู้ผู้ประกอบเนื่องจากมีสิ่งที่พัฒนารอบ C มากกว่าผู้ประกอบการ ข้อเสีย: Assembler เป็นภาษาการเขียนโปรแกรมระดับต่ำกว่า C ดังนั้นมันจึงเป็นสิ่งที่ดีสำหรับการเขียนโปรแกรมโดยตรงกับฮาร์ดแวร์ มีความยืดหยุ่นมากยิ่งทำให้คุณทำงานกับหน่วยความจำขัดจังหวะการลงทะเบียนขนาดเล็ก ฯลฯ
15 c  low-level  assembly 

5
การเขียนโปรแกรมระดับสูงและระดับต่ำ ฉันต้องเลือกจริงเหรอ? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ทุกครั้งที่ฉันถามในการสัมภาษณ์ที่ฉันชอบในระดับที่ดีที่สุด - ต่ำหรือระดับสูง สำหรับฉันดูเหมือนว่าข้อความโดยนัยคือพวกเขาเป็นทั้งความพิเศษและพวกเขาต้องการที่จะรู้ทิศทางที่ฉันกำลังมุ่งหน้าไป ปัญหาคือฉันดูเหมือนจะชอบทั้งสอง ระดับต่ำเป็นสิ่งที่ท้าทายอย่างยิ่งและมักต้องใช้ความรู้ลึกลับเป็นอย่างมาก ระดับสูงคือสิ่งที่ทุกสิ่งเซ็กซี่เกิดขึ้น: แอปพลิเคชั่นที่ผู้คนใช้โดยตรงผลลัพธ์ที่สามารถแสดงให้เห็นได้ง่าย (แสดงให้เห็น) ในแบบที่ทุกคนเข้าถึงได้และคุณจะได้ทำงานกับเครื่องมือขั้นสูงและโต้ตอบกับเทคโนโลยีใหม่ ๆ ฉันชอบที่จะทำทั้งสองอย่างแม้ว่าจะหมายถึงการสลับระหว่างพวกเขา (ฉันสงสัยว่ามีงานที่จะให้ฉันทำทั้งสองอย่างพร้อมกัน) แต่ฉันเดาว่าอุตสาหกรรมจะให้รางวัลแก่ผู้เชี่ยวชาญมากกว่าคนทั่วไป มันจะเป็นอาชีพที่มีปัญหาหรือไม่ถ้าฉันไม่เลือกอย่างใดอย่างหนึ่ง? การสลับไปมาระหว่างทั้งสองในทางปฏิบัติหรือไม่ว่าถ้าฉันจะออกจากงานที่ทำหนึ่งในนั้นฉันควรจะไม่มีประสบการณ์ "แรงเสียดทาน" ที่พยายามทำงานให้คนอื่นทำ (สมมติว่าฉันอยู่ในวง) มีโอกาสในการทำงานมีที่คุณได้รับที่จะทำทั้งสอง? ฉันต้องเลือกอย่างใดอย่างหนึ่งมากกว่าที่อื่น ๆ ?

5
วันนี้มีการใช้ภาษาใดในการเขียนโปรแกรมระดับต่ำ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา เมื่อฉันได้ยินการเขียนโปรแกรมระดับต่ำเช่นสำหรับไดรเวอร์ระบบฝังตัวระบบปฏิบัติการ ฯลฯ ฉันก็คิดถึง C ทันทีและบางที C ++ แต่ส่วนใหญ่ซี แต่ภาษาอื่น ๆ ที่ใช้สำหรับงานประเภทนี้เช่นกัน? วันนี้ฉันหมายถึงไม่ใช่สิ่งที่มีการใช้

4
อะไรคือความเสี่ยง / ความเสี่ยงด้านความปลอดภัยของโปรแกรมเมอร์ C ทุกคนที่ต้องระวัง? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว มีความเสี่ยงด้านความปลอดภัยมากมายจากการสัมผัสอย่างใกล้ชิดกับฮาร์ดแวร์ซึ่งต่างจากการใช้ API ที่ผ่านการทดสอบและผ่านการพิสูจน์แล้วจากภาษาโปรแกรมระดับสูง มันง่ายกว่ามากที่จะทำให้บัฟเฟอร์ล้นใน C กว่าในภาษาเช่น Java อะไรคือความเสี่ยงหรือช่องโหว่ (เช่น buffer overflow) ที่โปรแกรมเมอร์ C ทุกคนควรระวัง (ช่องโหว่ IE ที่เกี่ยวข้องกับโปรแกรมเมอร์ C) ปัญหาเหล่านี้นำไปสู่ปัญหาอะไร จะหลีกเลี่ยงพวกเขาได้อย่างไรและอะไรคือข้อผิดพลาดทั่วไปที่ทำให้สิ่งเหล่านี้เกิดขึ้นในโปรแกรม?

4
มีอันตรายในการเขียนข้อมูลดิบไปยังไฟล์หรือไม่? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันกำลังทำงานกับปัญหาในการเขียนโปรแกรม Pearls - โดยเฉพาะการใช้งานโปรแกรมที่เรียงลำดับไฟล์ที่มีอย่างน้อย 10,000,000 จำนวนเต็ม (คอลัมน์ 1 ปัญหา 3) เนื่องจากหนังสือไม่ได้ระบุวิธีการจัดเก็บข้อมูลในไฟล์ฉันจึงพิจารณาจัดเก็บจำนวนเต็มเป็นไบต์ดิบ (มีข้อ จำกัด อื่น ๆ ที่ทำให้ตัวเลือกดิบเป็นตัวเลือกที่ดี) ฉันไม่เคยทำงานที่ระดับต่ำนี้มาก่อนดังนั้นฉันต้องการทราบว่ามีสิ่งใดที่อันตรายที่ฉันควรระวัง ฉันต้องกังวลเกี่ยวกับการใช้ลำดับจุดสิ้นสุดของไฟล์โดยไม่ตั้งใจเมื่อฉันเขียนไบต์ดิบไปยังไฟล์หรือไม่? แก้ไข: ตอนนี้ฉันรู้แล้วว่าคำถามของฉันกว้างแค่ไหน ฉันหมายถึงปัญหาของความหายนะมากขึ้นเช่นเขียนทับไฟล์อื่น ๆ บนดิสก์โดยไม่ตั้งใจ ขออภัยฉันไม่ชัดเจนในตอนแรก
12 low-level  byte 

4
อัลกอริทึมที่อยู่เบื้องหลังการหยุด GC ชั่วคราวมีอะไรบ้าง
บางภาษาสำหรับจาวา exemple ได้แนะนำ GC ชั่วคราว GC เหล่านั้นสามารถทำงานส่วนใหญ่ได้โดยไม่ต้องหยุดทั้งโลก เห็นได้ชัดว่าเป็นปัญหาที่ค่อนข้างยากเพราะมันต้องการการวิเคราะห์หน่วยความจำเมื่อเธรดกำลังแก้ไขมันส่งผลให้ข้อมูลที่สามารถใช้ในการเริ่มต้นของกระบวนการและไม่ได้อีกต่อไปเมื่อมันเสร็จสิ้นหรือข้อมูลที่ดูเหมือนจะเป็น garbages แต่เนื่องจาก การอ้างอิงถูกย้ายในหน่วยความจำและไม่เคยปรากฏที่ใดที่ GC กำลังมองหา ดังนั้นโดยพื้นฐานแล้วอัลกอริธึมคืออะไร? บทความวิจัยหรือลิงค์บทความทางเทคนิคจริง ๆ จะถือว่าเป็นคำตอบที่ถูกต้องเนื่องจากหัวข้อนี้เป็นเรื่องทางเทคนิคจริงๆ

8
เรียนรู้สถาปัตยกรรมคอมพิวเตอร์ในฐานะโปรแกรมเมอร์ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันมักจะพบเจอกันที่กูรูที่ SO และสถานที่อื่น ๆ (อาจารย์ผู้สอนผู้เขียนหนังสือ ฯลฯ ) ที่จะพูดอะไรบางอย่างตามเส้น"This will cause alignment issues"หรือเกร็ดเล็กเกร็ดน้อยอื่น ๆ ฉันต้องการเรียนรู้เกี่ยวกับเกร็ดเล็กเกร็ดเหล่านี้ทั้งหมดที่เกี่ยวกับrelevantการเขียนโปรแกรม ตอนนี้โดยปกติแล้วเมื่อฉันเห็นหนังสือระดับต่ำ (เช่นหนังสือสถาปัตยกรรมคอมพิวเตอร์) พวกเขาอยู่ในระดับต่ำเกินไปและเหมาะสำหรับผู้ที่มีความสนใจหลักคือสถาปัตยกรรมคอมพิวเตอร์และไม่ใช่การออกแบบซอฟต์แวร์ คุณมีคำแนะนำสำหรับหนังสือที่อ่านเนื้อหาต่ำที่เกี่ยวข้องกับโปรแกรมเมอร์หรือไม่?

4
LLVM อยู่ในระดับต่ำในทางใด?
ในสิ่งที่วิธี (s) LLVM (ระดับต่ำเครื่องเสมือน)ระดับต่ำ? (ในขณะที่เขียนฉันไม่พบการขยายตัวย่อ "LLVM" นี้บนเว็บไซต์ แต่บน Wikipedia ) มันเรียกว่า "ระดับต่ำ" ในสิ่งที่มันออกแบบมาสำหรับ (โครงสร้างพื้นฐานคอมไพเลอร์) หรือเพราะมันทำงานใน "ระดับที่ต่ำกว่า" กว่าเครื่องมืออื่น ๆ ? ในฐานะที่เป็น "ภาพประกอบ" ของสิ่งนี้ LLVM อยู่ในระดับต่ำกว่าJVMและCLRหรือมันถูกออกแบบมาสำหรับการใช้ "ระดับล่าง" เท่านั้นหรือไม่

7
มีหลักการอะไรบ้างที่เรียนรู้จาก C ซึ่งไม่สามารถเรียนรู้ในภาษาระดับสูงกว่าได้ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ฉันเชื่อว่า C เป็นภาษาที่ดีในการเรียนรู้หลักการที่อยู่เบื้องหลังการเขียนโปรแกรม คุณยืนหยัดเพื่อเรียนรู้ในภาษาระดับต่ำกว่าที่เป็น "เวทมนต์" ห่างจากภาษาระดับสูงเช่นรูบี?
11 c  low-level 

3
หนึ่งจะไปเกี่ยวกับการอ่านหน่วยความจำจากกระบวนการได้อย่างไร มันแตกต่างจากระบบปฏิบัติการหรือไม่
ในฐานะนักพัฒนาเว็บที่มีประสบการณ์ แต่เป็นโปรแกรมเมอร์ "ระดับต่ำ" สามเณรสิ่งนี้เป็นสิ่งที่ฉันยังคงทำขึ้นอยู่ ฉันอยากรู้ว่าจะเริ่มค้นหาบล็อกหน่วยความจำได้อย่างไรแล้วอ่านมัน (เช่นอ่านตัวจับเวลาในเกมของเหมือง)? สิ่งนี้แตกต่างจากเวอร์ชั่น OS / OS หรือไม่?

3
ทำไมคอมไพเลอร์โดยทั่วไปสร้างไฟล์ปฏิบัติการสำหรับแพลตฟอร์มที่ติดตั้งไว้เท่านั้น?
ฉันเป็นนักพัฒนา C ++ และในความพยายามที่จะเข้าใจการพัฒนาข้ามแพลตฟอร์มได้ดียิ่งขึ้นฉันพยายามทำความเข้าใจกับรายละเอียดการใช้งานคอมไพเลอร์ให้ดีขึ้นและพวกเขาสร้างไบนารีเฉพาะระบบปฏิบัติการได้อย่างไร ในระหว่างการศึกษาของฉันฉันรู้ว่าอย่างน้อยก็ชั่วขณะคอมไพเลอร์ส่วนใหญ่ที่คุณดาวน์โหลดสำหรับแพลตฟอร์มเฉพาะรวบรวมไบนารีสำหรับแพลตฟอร์มนั้นเท่านั้น ดังนั้นถ้าคุณดาวน์โหลด IDE ที่มาพร้อมกับคอมไพเลอร์ exe สำหรับ Windows คอมไพเลอร์นั้นจะสามารถรวบรวมโปรแกรมของคุณสำหรับแอปพลิเคชัน windows x86-x64 และไม่ใช่แอปพลิเคชัน Linux หรือ Mac ตอนนี้ฉันเข้าใจแล้วว่าแพลตฟอร์มต่าง ๆ ต้องการรูปแบบไบนารีที่แตกต่างกัน แต่สิ่งที่ทำให้พูดคอมไพเลอร์ Visual C ++ บน windows เพื่อสร้างไฟล์ปฏิบัติการไบนารีของ linux ทำได้ยาก? ตราบใดที่คุณมีคำแนะนำการประกอบสำหรับ CPU ที่คุณใช้งานอยู่รวมถึงไลบรารีเฉพาะของ OS คุณไม่ควรรวบรวม exectuables สำหรับแพลตฟอร์มใด ๆ บนเครื่องใด ๆ

5
การประกาศตัวแปรที่ผันแปรหมายความว่าอย่างไร
โปรแกรมในระดับต่ำจำนวนมากใช้คำระเหยชนิดสำหรับการทำแผนที่หน่วยความจำและดังกล่าว แต่ฉันเรียงลำดับของการสับสนว่าสิ่งที่มันจริงๆจะอยู่ในพื้นหลัง กล่าวอีกนัยหนึ่งหมายความว่าอย่างไรเมื่อคอมไพเลอร์ไม่ "เพิ่มประสิทธิภาพ" ที่อยู่หน่วยความจำ
9 c++  c  low-level 

4
การจัดการหน่วยความจำสำหรับการส่งข้อความอย่างรวดเร็วระหว่างเธรดใน C ++
สมมติว่ามีสองเธรดซึ่งสื่อสารโดยการส่งข้อความข้อมูลแบบอะซิงโครนัสซึ่งกันและกัน แต่ละเธรดมีคิวข้อความบางประเภท คำถามของฉันอยู่ในระดับต่ำมาก: สิ่งที่คาดว่าจะเป็นวิธีที่มีประสิทธิภาพที่สุดในการจัดการหน่วยความจำ? ฉันสามารถคิดถึงวิธีแก้ปัญหาต่าง ๆ : newผู้ส่งสร้างวัตถุผ่าน deleteโทรผู้รับ Memory pooling (เพื่อโอนหน่วยความจำกลับไปยังผู้ส่ง) การรวบรวมขยะ (เช่น Boehm GC) (ถ้าวัตถุมีขนาดเล็กพอ) คัดลอกตามค่าเพื่อหลีกเลี่ยงการจัดสรรฮีปอย่างสมบูรณ์ 1) เป็นคำตอบที่ชัดเจนที่สุดดังนั้นฉันจะใช้มันสำหรับต้นแบบ มีโอกาสที่มันจะดีอยู่แล้ว แต่เป็นอิสระจากปัญหาเฉพาะของฉันฉันสงสัยว่าเทคนิคใดมีแนวโน้มมากที่สุดหากคุณกำลังปรับประสิทธิภาพการทำงานให้ดีที่สุด ฉันคาดหวังว่าการรวมกันจะดีที่สุดในทางทฤษฎีโดยเฉพาะอย่างยิ่งเพราะคุณสามารถใช้ความรู้เพิ่มเติมเกี่ยวกับการไหลของข้อมูลระหว่างเธรด อย่างไรก็ตามฉันกลัวว่ามันเป็นการยากที่จะทำถูกที่สุด การปรับแต่งมากมาย ... :-( การรวบรวมขยะควรเพิ่มได้อย่างง่ายดายหลังจากนั้น (หลังจากโซลูชันที่ 1) และฉันคาดว่ามันจะทำงานได้ดีมาก ดังนั้นฉันคิดว่ามันเป็นวิธีแก้ปัญหาที่ใช้งานได้จริงหาก 1) กลายเป็นว่าไม่มีประสิทธิภาพเกินไป หากวัตถุมีขนาดเล็กและเรียบง่ายการคัดลอกตามค่าอาจเร็วที่สุด อย่างไรก็ตามฉันกลัวว่ามันจะบังคับให้มีข้อ จำกัด ที่ไม่จำเป็นในการใช้งานข้อความที่รองรับดังนั้นฉันจึงต้องการหลีกเลี่ยง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.