คำถามติดแท็ก memory-management

กระบวนการจัดสรรและเพิ่มส่วนของหน่วยความจำกายภาพแบบไดนามิกเพื่อตอบสนองต่อคำขอของโปรแกรมด้วยความเป็นธรรมและไม่มีความอดอยากในหมู่ผู้ร้องขอหากเป็นไปได้

8
การเรียกระบบ brk () ทำหน้าที่อะไร?
ตามคู่มือโปรแกรมเมอร์ Linux: brk () และ sbrk () เปลี่ยนตำแหน่งของตัวแบ่งโปรแกรมซึ่งกำหนดจุดสิ้นสุดของส่วนข้อมูลของกระบวนการ ส่วนข้อมูลหมายถึงอะไรที่นี่ เป็นเพียงส่วนข้อมูลหรือข้อมูล BSS และฮีปรวมกันหรือไม่ ตามวิกิ: บางครั้งข้อมูลพื้นที่ BSS และกองรวมเรียกว่า "ส่วนข้อมูล" ฉันไม่เห็นเหตุผลที่จะเปลี่ยนขนาดของกลุ่มข้อมูล ถ้าเป็นข้อมูลBSSและกองรวมกันมันก็สมเหตุสมผลแล้วเพราะกองจะได้พื้นที่มากขึ้น ซึ่งนำฉันไปที่คำถามที่สองของฉัน ในบทความทั้งหมดที่ฉันอ่านจนถึงตอนนี้ผู้เขียนบอกว่ากองเติบโตขึ้นและกองทับลง แต่สิ่งที่พวกเขาไม่อธิบายก็คือจะเกิดอะไรขึ้นเมื่อฮีปใช้พื้นที่ทั้งหมดระหว่างฮีปกับสแต็ค
184 c  linux  unix  memory-management  brk 

9
หน่วยความจำหลามรั่ว [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดเมื่อปีที่แล้ว ปรับปรุงคำถามนี้ ฉันมีสคริปต์ที่ใช้เวลานานซึ่งหากปล่อยให้ทำงานนานพอจะใช้หน่วยความจำทั้งหมดในระบบของฉัน ฉันไม่มีคำถามสองข้อ: มี "วิธีปฏิบัติที่ดีที่สุด" ที่จะปฏิบัติตามซึ่งจะช่วยป้องกันการรั่วไหลที่เกิดขึ้น? มีเทคนิคอะไรบ้างในการดีบักการรั่วไหลของหน่วยความจำใน Python

16
ตัวอย่างที่น่าสนใจของตัวจัดสรร C ++ แบบกำหนดเอง
อะไรคือเหตุผลที่ดีในการทิ้งstd::allocatorโซลูชันที่ปรับแต่งเอง? คุณเคยเจอกับสถานการณ์ที่จำเป็นสำหรับความถูกต้องประสิทธิภาพความสามารถในการปรับขยายและอื่น ๆ หรือไม่? ตัวอย่างที่ฉลาดจริงๆ ตัวจัดสรรแบบกำหนดเองนั้นเป็นคุณสมบัติของไลบรารีมาตรฐานที่ฉันไม่ต้องการมาก ฉันแค่สงสัยว่าคนที่อยู่ใน SO สามารถให้ตัวอย่างที่น่าสนใจเพื่อพิสูจน์การมีอยู่ของพวกเขา

8
วิธีการเริ่มต้นหน่วยความจำด้วยตัวดำเนินการใหม่ใน C ++
ฉันเพิ่งเริ่มเข้าสู่ C ++ และฉันต้องการรับนิสัยที่ดี หากฉันเพิ่งจัดสรรอาเรย์ประเภทที่intมีnewโอเปอเรเตอร์ฉันจะกำหนดค่าเริ่มต้นให้เป็น 0 ได้อย่างไรโดยไม่ต้องวนลูปเองทั้งหมด? ฉันควรจะเพียงแค่ใช้memset? มีวิธี“ C ++” ที่จะทำหรือไม่

9
รักษาวงจรใน "ตัวเอง" กับบล็อก
ฉันเกรงว่าคำถามนี้ค่อนข้างง่าย แต่ฉันคิดว่ามันเกี่ยวข้องกับโปรแกรมเมอร์ Objective-C จำนวนมากที่เข้าบล็อก สิ่งที่ฉันได้ยินคือตั้งแต่บล็อกจับตัวแปรภายในที่อ้างอิงภายในพวกเขาเป็นconstสำเนาการใช้selfภายในบล็อกอาจส่งผลให้เกิดการวนรอบในกรณีที่ควรคัดลอกบล็อกนั้น ดังนั้นเราควรจะใช้__blockเพื่อบังคับให้บล็อกจัดการโดยตรงselfแทนที่จะคัดลอกบล็อก __block typeof(self) bself = self; [someObject messageWithBlock:^{ [bself doSomething]; }]; แทนที่จะเป็นเพียงแค่ [someObject messageWithBlock:^{ [self doSomething]; }]; สิ่งที่ฉันอยากรู้มีดังต่อไปนี้ถ้าเป็นจริงมีวิธีที่ฉันสามารถหลีกเลี่ยงความอัปลักษณ์ (นอกเหนือจากการใช้ GC) หรือไม่

11
ลบตัวชี้ไปยังคลาสย่อยหรือไม่เรียกตัวทำลายคลาสพื้นฐานหรือไม่
ฉันมีอันclass Aที่ใช้การจัดสรรหน่วยความจำฮีปสำหรับหนึ่งในฟิลด์ของมัน คลาส A ถูกสร้างและเก็บเป็นฟิลด์ตัวชี้ในคลาสอื่น ( class B. เมื่อฉันทำกับวัตถุของคลาส B ฉันเรียกdeleteซึ่งฉันคิดว่าเรียกว่า destructor ... แต่สิ่งนี้เรียกว่า destructor ของคลาส A ด้วยหรือไม่ แก้ไข: จากคำตอบที่ฉันใช้ (โปรดแก้ไขหากไม่ถูกต้อง): delete ของอินสแตนซ์ของ B เรียก B :: ~ B (); สายไหน A::~A(); A::~A ควรdeleteกำหนดตัวแปรสมาชิกที่จัดสรรฮีปทั้งหมดของวัตถุ A อย่างชัดเจน ในที่สุดการจัดเก็บหน่วยความจำบล็อกกล่าวว่าตัวอย่างของการเรียน B จะถูกส่งกลับไปยังกอง - เมื่อใหม่ถูกนำมาใช้เป็นครั้งแรกที่จัดสรรบล็อกของหน่วยความจำบนกองก่อสร้างแล้วเรียกเพื่อเริ่มต้นมันตอนนี้หลังจาก destructors ทั้งหมดได้รับการเรียกเพื่อจบวัตถุ บล็อกที่วัตถุที่อยู่จะถูกส่งกลับไปยังกอง

20
ดึงการใช้งาน CPU และการใช้หน่วยความจำของกระบวนการเดียวบน Linux?
ฉันต้องการรับ CPU และการใช้หน่วยความจำของกระบวนการเดียวบน Linux - ฉันรู้จัก PID หวังว่าฉันจะได้รับทุก ๆ วินาทีและเขียนลงใน CSV โดยใช้คำสั่ง 'เฝ้าดู' ฉันสามารถใช้คำสั่งใดเพื่อรับข้อมูลนี้จากบรรทัดคำสั่ง Linux

3
สิ่งที่โปรแกรมเมอร์ทุกคนควรรู้เกี่ยวกับหน่วยความจำ
ฉันสงสัยว่า Ulrich Drepper เป็นเท่าใดโปรแกรมเมอร์ทุกคนควรทราบเกี่ยวกับหน่วยความจำจากปี 2007 ยังคงใช้ได้ ฉันไม่สามารถหาเวอร์ชั่นที่ใหม่กว่า 1.0 หรือ errata ได้

10
จะตรวจสอบว่า pytorch ใช้ GPU ได้อย่างไร?
ฉันต้องการทราบว่าpytorchใช้ GPU ของฉันหรือไม่ เป็นไปได้ที่จะตรวจสอบด้วยnvidia-smiหากมีกิจกรรมใด ๆ จาก GPU ในระหว่างกระบวนการ แต่ฉันต้องการสิ่งที่เขียนในpythonสคริปต์ มีวิธีทำเช่นนั้นหรือไม่?

13
“ หน่วยความจำที่จัดสรรในเวลารวบรวม” หมายความว่าอย่างไร?
ในการเขียนโปรแกรมภาษาเช่น C และ C ++ ผู้คนมักจะอ้างถึงการจัดสรรหน่วยความจำแบบคงที่และแบบไดนามิก ฉันเข้าใจแนวคิด แต่วลี "หน่วยความจำทั้งหมดถูกจัดสรร (สงวนไว้) ในช่วงเวลารวบรวม" ทำให้ฉันสับสนอยู่เสมอ การรวบรวมดังที่ฉันเข้าใจแล้วจะแปลงรหัส C / C ++ ระดับสูงเป็นภาษาเครื่องและส่งออกไฟล์ปฏิบัติการ หน่วยความจำ "จัดสรร" ในไฟล์ที่คอมไพล์แล้วเป็นอย่างไร? การจัดสรรหน่วยความจำใน RAM มักจะไม่ใช่เรื่องการจัดการหน่วยความจำเสมือนทุกครั้งหรือไม่ การจัดสรรหน่วยความจำตามคำนิยามไม่ใช่แนวคิดของรันไทม์ใช่หรือไม่ ถ้าฉันสร้างตัวแปรที่จัดสรรแบบคงที่ 1KB ในรหัส C / C ++ ของฉันนั่นจะเพิ่มขนาดของไฟล์ปฏิบัติการด้วยจำนวนเดียวกันหรือไม่? นี่เป็นหนึ่งในหน้าที่ใช้วลีภายใต้หัวข้อ "การจัดสรรแบบคงที่" กลับไปสู่พื้นฐาน: การจัดสรรหน่วยความจำประวัติความเป็นมา

9
ตัวแปรของฉันถูกเก็บไว้ในหน่วยความจำที่ไหน
โดยพิจารณาว่าหน่วยความจำแบ่งออกเป็นสี่ส่วน: data, heap, stack และ code โดยที่ตัวแปรโกลบอล, ตัวแปรสแตติก, ชนิดข้อมูลคงที่, ตัวแปรโลคัล (กำหนดและประกาศในฟังก์ชัน), ตัวแปร (ในฟังก์ชั่นหลัก), พอยน์เตอร์ และพื้นที่ที่จัดสรรแบบไดนามิก (โดยใช้ malloc และ calloc) จะถูกเก็บไว้ในหน่วยความจำหรือไม่? ฉันคิดว่าพวกเขาจะได้รับการจัดสรรดังนี้: ตัวแปรโกลบอล -------> ข้อมูล ตัวแปรคงที่ -------> ข้อมูล ประเภทข้อมูลคงที่ -----> รหัส ตัวแปรท้องถิ่น (ประกาศและกำหนดไว้ในฟังก์ชั่น) --------> สแต็ค ตัวแปรที่ประกาศและกำหนดในฟังก์ชั่นหลัก -----> heap พอยน์เตอร์ (ตัวอย่างเช่นchar *arr, int *arr) -------> heap พื้นที่ที่จัดสรรแบบไดนามิก (โดยใช้ malloc และ calloc) --------> …

3
เหตุใดรายการที่เหมือนกันสองรายการจึงมีหน่วยความจำแตกต่างกัน
ฉันสร้างสองรายการl1และl2แต่แต่ละคนด้วยวิธีการสร้างที่แตกต่างกัน: import sys l1 = [None] * 10 l2 = [None for _ in range(10)] print('Size of l1 =', sys.getsizeof(l1)) print('Size of l2 =', sys.getsizeof(l2)) แต่ผลลัพธ์ที่ทำให้ฉันประหลาดใจ: Size of l1 = 144 Size of l2 = 192 รายการที่สร้างด้วย list comprehension มีขนาดใหญ่กว่าในหน่วยความจำ แต่ทั้งสองรายการนั้นเหมือนกันใน Python ทำไมถึงเป็นอย่างนั้น? นี่เป็นสิ่งภายใน CPython หรือมีคำอธิบายอื่น ๆ

7
ทำไมคุณถึงต้องใช้ ivar?
ฉันมักจะเห็นคำถามนี้ถามวิธีอื่นเช่นต้องมี ivar ทุกตัวหรือไม่ (และฉันชอบคำตอบของบีบีมต่อคำถามนี้) ฉันใช้คุณสมบัติเกือบทั้งหมดในรหัสของฉัน อย่างไรก็ตามบ่อยครั้งที่ฉันทำงานกับผู้รับเหมาที่พัฒนาบน iOS มาเป็นเวลานานและเป็นโปรแกรมเมอร์เกมแบบดั้งเดิม เขาเขียนโค้ดที่ประกาศเกือบจะไม่มีคุณสมบัติใด ๆ และโน้มตัวลงบน ivars ฉันคิดว่าเขาทำสิ่งนี้เพราะ 1. ) เขาคุ้นเคยกับมันเนื่องจากคุณสมบัติไม่ได้มีอยู่เสมอจนกว่า Objective C 2.0 (Oct '07) และ 2) สำหรับการเพิ่มประสิทธิภาพขั้นต่ำที่จะไม่ทะลุผ่านตัวตั้งค่า ในขณะที่เขาเขียนโค้ดที่ไม่รั่วไหลฉันยังต้องการให้เขาใช้คุณสมบัติมากกว่า ivars เราพูดถึงเรื่องนี้และเขาไม่เห็นเหตุผลมากที่จะใช้คุณสมบัติเนื่องจากเราไม่ได้ใช้ KVO และเขามีประสบการณ์ในการดูแลปัญหาหน่วยความจำ คำถามของฉันมีมากขึ้น ... ทำไมคุณถึงอยากใช้ช่วงเวลา ivar - มีประสบการณ์หรือไม่ มีความแตกต่างด้านประสิทธิภาพที่ยอดเยี่ยมที่การใช้ ivar จริงหรือไม่? นอกจากนี้เพื่อความกระจ่างฉันแทนที่ผู้ตั้งค่าและผู้เรียกใช้ตามความจำเป็นและใช้ ivar ที่สัมพันธ์กับคุณสมบัตินั้นภายในตัวรับ / ตัวตั้งค่า อย่างไรก็ตามนอก getter / setter หรือ init ฉันมักจะใช้self.myPropertyไวยากรณ์ …

10
งบประมาณหน่วยความจำสูงสุดของแอป ios
ฉันกำลังทำงานกับเกม iOS ที่กำหนดเป้าหมายเป็นอย่างน้อย 3gs เรากำลังใช้ทรัพย์สิน HD สำหรับอุปกรณ์แสดงผลเรตินา (iphone 4, ipod touch 4th gen) หน่วยความจำที่ชาญฉลาด Ipod Touch 4th gen ดูเหมือนจะเป็นอุปกรณ์ที่ จำกัด ที่สุดสำหรับเราเนื่องจากมี RAM เท่ากัน (256 เทียบกับ Iphone 4 ของ 512) เป็น 3gs แต่เราใช้เนื้อหา HD ในนั้น แอปเคยขัดข้องเมื่อพยายามโหลด ram 100-110mb แต่ตอนนี้เราลดลงเหลือ 70MB แล้วเราไม่เคยโหลดขัดข้องเลย หลังจากการค้นหาจำนวนมากดูเหมือนว่าจะไม่มีข้อ จำกัด อย่างเป็นทางการดังนั้นเราจะรู้ได้อย่างไรว่างบประมาณหน่วยความจำแบบใดที่จะใช้ปลอดภัย เราต้องการให้งบประมาณแก่ศิลปินที่พวกเขาสามารถใช้ได้โดยไม่ต้องกังวลเรื่องหน่วยความจำสำหรับแต่ละแผนที่

15
กลยุทธ์และเครื่องมือใดที่มีประโยชน์สำหรับการค้นหาหน่วยความจำรั่วใน. NET
ฉันเขียน C ++ เป็นเวลา 10 ปี ฉันพบปัญหาหน่วยความจำ แต่สามารถแก้ไขได้ด้วยความพยายามพอสมควร ในช่วงสองสามปีที่ผ่านมาฉันได้เขียน C # ฉันพบว่าฉันยังได้รับปัญหาหน่วยความจำมากมาย พวกมันยากที่จะวินิจฉัยและแก้ไขเนื่องจากความไม่แน่นอนและเนื่องจากปรัชญา C # คือคุณไม่ควรกังวลเกี่ยวกับสิ่งต่าง ๆ เมื่อคุณทำอย่างแน่นอน ปัญหาหนึ่งที่ฉันพบคือฉันต้องกำจัดและล้างข้อมูลทุกอย่างในโค้ดอย่างชัดเจน ถ้าฉันไม่ทำเช่นนั้นหน่วยความจำโปรไฟล์ก็ไม่ได้ช่วยอะไรเพราะมีแกลบที่ลอยอยู่มากมายเกี่ยวกับคุณไม่สามารถหารอยรั่วภายในข้อมูลทั้งหมดที่พวกเขากำลังพยายามแสดงให้คุณเห็น ฉันสงสัยว่าฉันมีความคิดที่ผิดหรือว่าเครื่องมือที่ฉันมีไม่ใช่สิ่งที่ดีที่สุด กลยุทธ์และเครื่องมือชนิดใดที่มีประโยชน์สำหรับการแก้ไขปัญหาการรั่วไหลของหน่วยความจำใน. NET

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.