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

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

7
C ++, ร้านค้าฟรีเทียบกับฮีป
การจัดสรรแบบไดนามิกที่มีnew/deleteบอกว่าจะใช้สถานที่ในฟรีร้านค้า , ในขณะที่malloc/freeการดำเนินการใช้กอง ฉันต้องการทราบว่าในทางปฏิบัติมีความแตกต่างกันหรือไม่ คอมไพเลอร์สร้างความแตกต่างระหว่างสองคำหรือไม่? ( ร้านค้าฟรีและHeapไม่ใช่new/malloc)


10
การใช้งาน stack และ heap ที่เหมาะสมใน C ++?
ฉันเขียนโปรแกรมมาระยะหนึ่งแล้ว แต่ส่วนใหญ่เป็น Java และ C # ฉันไม่เคยต้องจัดการหน่วยความจำด้วยตัวเองเลย ฉันเพิ่งเริ่มเขียนโปรแกรมใน C ++ และฉันรู้สึกสับสนเล็กน้อยว่าเมื่อใดที่ฉันควรจัดเก็บสิ่งต่างๆบนสแต็กและเมื่อใดที่จะเก็บไว้ในฮีป ความเข้าใจของฉันคือตัวแปรที่ถูกเข้าถึงบ่อยมากควรถูกเก็บไว้ในสแต็กและอ็อบเจกต์ตัวแปรที่ไม่ค่อยได้ใช้และโครงสร้างข้อมูลขนาดใหญ่ทั้งหมดควรถูกเก็บไว้ในฮีป นี่ถูกต้องหรือฉันไม่ถูกต้อง?

22
Android Studio - วิธีเพิ่มขนาดฮีปที่จัดสรร
ฉันใช้ Android Studio มา 3 เดือนแล้วและหนึ่งในแอปที่ฉันเริ่มใช้นั้นมีขนาดใหญ่พอสมควร การใช้หน่วยความจำที่ระบุไว้ที่ด้านล่างขวาของโปรแกรมบอกว่าฮีปที่จัดสรรของฉันสูงสุดที่ 494M เมื่อฉันเริ่มเปลี่ยนไฟล์ XML การใช้หน่วยความจำของฉันถึงขีด จำกัด อย่างรวดเร็วและ IDE ขัดข้องด้วยข้อผิดพลาดหน่วยความจำไม่เพียงพอเช่นนี้ ฉันพยายามเพิ่มขนาดฮีปโดยใช้สิ่งนี้ แต่จนถึงขณะนี้ยังไม่มีผลใด ๆ ฉันได้ดูบทความหลายสิบบทความและคำถามอื่น ๆ เกี่ยวกับวิธีเพิ่มขนาดฮีป แต่ไม่มีคำตอบใดได้ผล ไม่ว่าฉันจะทำอะไรกับ VMOPTIONS หรือการตั้งค่า IDE ขนาดฮีปจะไม่เพิ่มขึ้น ฉันเชื่อว่าฉันกำลังแก้ไขไฟล์ที่ถูกต้องสำหรับ VMOPTIONS เพราะหากฉันจงใจให้คำสั่งที่ไม่ถูกต้อง Android Studio บ่นเกี่ยวกับมันและไม่เริ่มทำงาน ฉันใช้ windows 7 - 64 บิตและมี RAM 16GB มีใครมีปัญหานี้กับ Android Studio อีกบ้าง? และคุณสามารถแก้ไขได้หรือไม่?

3
ในสถานการณ์ใดบ้างที่เราต้องเขียน __autoreleasing ความเป็นเจ้าของคุณสมบัติภายใต้ ARC
ฉันกำลังพยายามไขปริศนาให้เสร็จ __strongเป็นค่าเริ่มต้นสำหรับพอยน์เตอร์อ็อบเจ็กต์ Objective-C ที่เก็บรักษาได้เช่น NSObject, NSString และอื่น ๆ ซึ่งเป็นการอ้างอิงที่ชัดเจน ARC จะปรับสมดุลกับ-releaseจุดสิ้นสุดของขอบเขต __unsafe_unretainedเท่ากับวิธีเก่า ใช้สำหรับตัวชี้ที่อ่อนแอโดยไม่ยึดวัตถุที่ยึดได้ __weakเหมือนกับ__unsafe_unretainedยกเว้นว่ามันเป็นการอ้างอิงที่อ่อนแอโดยอัตโนมัติซึ่งหมายความว่าตัวชี้จะถูกตั้งค่าเป็นศูนย์ทันทีที่วัตถุที่อ้างอิงถูกยกเลิกการจัดสรร ซึ่งจะช่วยขจัดอันตรายจากตัวชี้อันตรายและข้อผิดพลาด EXC_BAD_ACCESS แต่สิ่งที่__autoreleasingดีสำหรับ? ฉันมีช่วงเวลาที่ยากลำบากในการค้นหาตัวอย่างที่ใช้ได้จริงเกี่ยวกับเวลาที่ฉันต้องใช้คุณสมบัตินี้ ฉันเชื่อว่าเป็นเพียงฟังก์ชันและวิธีการที่คาดว่าจะมีตัวชี้ตัวชี้เช่น: - (BOOL)save:(NSError**); หรือ NSError *error = nil; [database save:&error]; ซึ่งภายใต้ ARC จะต้องประกาศด้วยวิธีนี้: - (BOOL)save:(NSError* __autoreleasing *); แต่นี้เป็นที่คลุมเครือเกินไปและฉันต้องการที่จะเข้าใจว่าทำไม ข้อมูลโค้ดที่ฉันพบคือตำแหน่ง __autoreleasing ระหว่างสองดาวซึ่งดูแปลกสำหรับฉัน ประเภทคือNSError**(ตัวชี้ตัวชี้ไปที่ NSError) ดังนั้นทำไมจึงวางไว้__autoreleasingระหว่างดวงดาวไม่ใช่แค่อยู่ข้างหน้าNSError**? นอกจากนี้ยังอาจจะมีสถานการณ์อื่น ๆ __autoreleasingที่ฉันจะต้องพึ่งพา

1
การจัดสรรแบบคงที่ใน java - heap, stack และการสร้างแบบถาวร
เมื่อเร็ว ๆ นี้ฉันได้อ่านเกี่ยวกับรูปแบบการจัดสรรหน่วยความจำใน java มากและมีข้อสงสัยมากมายเนื่องจากฉันได้อ่านจากแหล่งต่างๆ ฉันได้รวบรวมแนวคิดของฉันแล้วและฉันจะขออ่านทุกประเด็นและแสดงความคิดเห็นเกี่ยวกับพวกเขา ฉันรู้มาว่าการจัดสรรหน่วยความจำเป็นเฉพาะ JVM ดังนั้นฉันต้องบอกไว้ก่อนว่าคำถามของฉันเป็นคำถามเฉพาะของ Sun คลาส (โหลดโดย classloaders) ไปในพื้นที่พิเศษบนฮีป: การสร้างแบบถาวร ข้อมูลทั้งหมดที่เกี่ยวข้องกับคลาสเช่นชื่อคลาสอาร์เรย์อ็อบเจ็กต์ที่เกี่ยวข้องกับคลาสอ็อบเจ็กต์ภายในที่ใช้โดย JVM (เช่น java / lang / Object) และข้อมูลการปรับให้เหมาะสมจะเข้าสู่พื้นที่การสร้างแบบถาวร ตัวแปรสมาชิกคงที่ทั้งหมดจะถูกเก็บไว้ในพื้นที่การสร้างแบบถาวรอีกครั้ง วัตถุไปกองที่แตกต่างกัน: คนรุ่นใหม่ มีเพียงหนึ่งสำเนาของแต่ละวิธีต่อคลาสเท่านั้นไม่ว่าจะเป็นวิธีการแบบคงที่หรือไม่คงที่ สำเนานั้นใส่ไว้ในพื้นที่การสร้างแบบถาวร สำหรับวิธีการที่ไม่คงที่พารามิเตอร์และตัวแปรโลคัลทั้งหมดจะเข้าสู่สแต็กและเมื่อใดก็ตามที่มีการเรียกใช้เมธอดนั้นอย่างเป็นรูปธรรมเราจะได้สแต็กเฟรมใหม่ที่เชื่อมโยงกับมัน ฉันไม่แน่ใจว่าตัวแปรโลคัลของวิธีคงที่ถูกเก็บไว้ที่ไหน พวกเขาอยู่ในกองของการสร้างแบบถาวรหรือไม่? หรือเพียงข้อมูลอ้างอิงถูกเก็บไว้ในพื้นที่การสร้างแบบถาวรและสำเนาจริงอยู่ที่อื่น (ที่ไหน?) ฉันยังไม่แน่ใจด้วยว่าประเภทการส่งคืนของเมธอดจะถูกเก็บไว้ที่ใด หากออบเจ็กต์ (ในรุ่นเยาว์) จำเป็นต้องใช้สมาชิกแบบคงที่ (ในรุ่นถาวร) พวกเขาจะได้รับการอ้างอิงถึงสมาชิกแบบคงที่ && พวกเขาจะได้รับพื้นที่หน่วยความจำเพียงพอที่จะจัดเก็บประเภทการส่งคืนของวิธีการ ฯลฯ ขอบคุณสำหรับสิ่งนี้!

6
มีวิธีลบตัวแปรฟังก์ชันและอื่น ๆ ที่สร้างขึ้นจากหน่วยความจำของล่ามหรือไม่?
ฉันค้นหาคำตอบที่ถูกต้องสำหรับคำถามนี้มาสองสามวันแล้ว แต่ก็ยังไม่มีอะไรดี ฉันไม่ใช่มือใหม่ที่สมบูรณ์ในการเขียนโปรแกรม แต่ยังไม่ถึงระดับกลาง เมื่อฉันอยู่ในเชลล์ของ Python ฉันพิมพ์: dir()และฉันสามารถดูชื่อทั้งหมดของวัตถุทั้งหมดในขอบเขตปัจจุบัน (บล็อกหลัก) มีทั้งหมด 6 ชื่อ: ['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__'] จากนั้นเมื่อฉันประกาศตัวแปรx = 10มันจะเพิ่มลงในรายการวัตถุนั้นโดยอัตโนมัติภายใต้โมดูลในตัวdir()และเมื่อฉันพิมพ์dir()อีกครั้งมันจะแสดงในตอนนี้: ['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'x'] เช่นเดียวกับฟังก์ชันคลาสและอื่น ๆ ฉันจะลบอ็อบเจ็กต์ใหม่ทั้งหมดโดยไม่ลบมาตรฐาน 6 ที่มีอยู่ในตอนต้นได้อย่างไร ฉันได้อ่านที่นี่เกี่ยวกับ "การล้างหน่วยความจำ" "การล้างคอนโซล" ซึ่งจะลบข้อความทั้งหมดจากหน้าต่างพรอมต์คำสั่ง: >>> import sys >>> clear = lambda: os.system('cls') >>> clear() แต่ทั้งหมดนี้ไม่เกี่ยวข้องกับสิ่งที่ฉันพยายามจะบรรลุมันไม่ได้ทำความสะอาดวัตถุที่ใช้แล้วทั้งหมด

6
คำอธิบายของพื้นที่เก็บข้อมูลที่แข็งแกร่งและอ่อนแอใน iOS5
ฉันยังใหม่กับการพัฒนา iOS5 และใช้ objective-c ฉันมีปัญหาในการทำความเข้าใจความแตกต่างระหว่างพื้นที่เก็บข้อมูลที่แข็งแกร่งและอ่อนแอ ฉันได้อ่านเอกสารประกอบและคำถามอื่น ๆ เกี่ยวกับ SO แล้ว แต่คำถามเหล่านี้เหมือนกันกับฉันโดยไม่มีข้อมูลเชิงลึกเพิ่มเติม ฉันอ่านเอกสารประกอบ: การเปลี่ยนไปใช้ ARC - อ้างอิงถึงข้อกำหนดของ iOS4 ในการเก็บรักษากำหนดและเผยแพร่ ซึ่งทำให้ฉันสับสน จากนั้นฉันมองเข้าไปใน Open U CS193p ซึ่งมันแยกความแข็งแกร่งและอ่อนแอ: แข็งแกร่ง : "เก็บสิ่งนี้ไว้ในกองจนกว่าฉันจะไม่ชี้ไปที่มันอีกต่อไป" อ่อนแอ : "ให้สิ่งนี้ตราบเท่าที่มีคนอื่นชี้ไปที่มันอย่างรุนแรง คำจำกัดความทั้งสองไม่เหมือนกัน = ถ้าตัวชี้ไม่ชี้ไปที่วัตถุอีกต่อไปแล้วปล่อยหน่วยความจำที่ถือวัตถุไว้หรือไม่? ฉันเข้าใจแนวคิดของพอยน์เตอร์ฮีปการจัดสรรหรือการจัดสรรหน่วยความจำ แต่อะไรคือความแตกต่างระหว่างความแข็งแกร่งและความอ่อนแอ

11
ตัวชี้อัจฉริยะ: ใครเป็นเจ้าของวัตถุ [ปิด]
มันยากที่จะบอกว่ากำลังถามอะไรที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือมีวาทศิลป์และไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน8 ปีที่ผ่านมา C ++ เป็นข้อมูลเกี่ยวกับหน่วยความจำที่เป็นเจ้าของ - aka ความหมายเป็นเจ้าของ เป็นความรับผิดชอบของเจ้าของหน่วยความจำที่จัดสรรแบบไดนามิกเพื่อปลดปล่อยหน่วยความจำนั้น ดังนั้นคำถามจึงกลายเป็นว่าใครเป็นเจ้าของความทรงจำ ในความเป็นเจ้าของ C ++ จะถูกบันทึกโดยชนิดที่ตัวชี้ดิบถูกห่อไว้ภายในดังนั้นในโปรแกรม C ++ ที่ดี (IMO) จึงหายากมาก ( หายากไม่ใช่ไม่เคย ) ที่จะเห็นตัวชี้ดิบที่ส่งผ่านไปรอบ ๆ (เนื่องจากตัวชี้ดิบไม่มีการอนุมานความเป็นเจ้าของดังนั้นเราจึงสามารถ อย่าบอกว่าใครเป็นเจ้าของหน่วยความจำดังนั้นหากไม่ได้อ่านเอกสารอย่างรอบคอบคุณจะไม่สามารถบอกได้ว่าใครเป็นผู้รับผิดชอบในการเป็นเจ้าของ) ในทางกลับกันเป็นเรื่องยากที่จะเห็นตัวชี้ดิบที่เก็บไว้ในคลาสแต่ละตัวชี้ดิบจะถูกเก็บไว้ในกระดาษห่อตัวชี้อัจฉริยะของตัวเอง ( หมายเหตุ:หากคุณไม่ได้เป็นเจ้าของวัตถุคุณไม่ควรเก็บไว้เพราะคุณไม่สามารถรู้ได้ว่าเมื่อไรที่มันจะออกนอกขอบเขตและถูกทำลาย) ดังนั้นคำถาม: ผู้คนมีความหมายเกี่ยวกับความเป็นเจ้าของประเภทใด คลาสมาตรฐานใดบ้างที่ใช้ในการนำความหมายเหล่านั้นไปใช้ คุณคิดว่ามันมีประโยชน์ในสถานการณ์ใดบ้าง? ให้เก็บประเภทการเป็นเจ้าของทางความหมายไว้ 1 ประเภทต่อคำตอบเพื่อให้สามารถโหวตขึ้นและลงทีละรายการได้ สรุป: ตามแนวคิดแล้วตัวชี้ที่ชาญฉลาดนั้นเรียบง่ายและการนำไปใช้อย่างไร้เดียงสาทำได้ง่าย ฉันได้เห็นการพยายามใช้งานหลายครั้ง แต่มักจะใช้งานไม่ได้ในลักษณะบางอย่างที่ไม่ชัดเจนสำหรับการใช้งานทั่วไปและตัวอย่าง ดังนั้นฉันขอแนะนำให้ใช้ตัวชี้อัจฉริยะที่ผ่านการทดสอบอย่างดีจากไลบรารีแทนที่จะหมุนตัวเอง std::auto_ptrหรือหนึ่งในตัวชี้สมาร์ท Boost ดูเหมือนจะครอบคลุมทุกความต้องการของฉัน std::auto_ptr<T>: คนเดียวเป็นเจ้าของวัตถุ …

10
ฟรี (ptr) ที่ ptr เป็นหน่วยความจำ NULL เสียหายหรือไม่
ในทางทฤษฎีฉันสามารถพูดได้ว่า free(ptr); free(ptr); เป็นความเสียหายของหน่วยความจำเนื่องจากเรากำลังปลดปล่อยหน่วยความจำที่ได้รับการปลดปล่อยไปแล้ว แต่ถ้า free(ptr); ptr=NULL; free(ptr); เนื่องจากระบบปฏิบัติการจะทำงานในลักษณะที่ไม่ได้กำหนดฉันจึงไม่สามารถรับการวิเคราะห์ทางทฤษฎีที่แท้จริงเกี่ยวกับสิ่งที่เกิดขึ้นได้ ไม่ว่าฉันกำลังทำอะไรอยู่นี้หน่วยความจำเสียหายหรือไม่? การพ้นตัวชี้ NULL ถูกต้องหรือไม่?

3
UIPopovercontroller dealloc ถึงในขณะที่ยังมองเห็นป๊อปโอเวอร์
ฉันขอรับรองว่าฉันได้มองหาคำตอบใน SO สำหรับคำถามของฉัน แต่ไม่มีคำตอบใดที่เป็นประโยชน์ ที่นี่ฉันมีรหัสง่ายๆที่ควรนำเสนอUIImagePickerControllerภายใน a UIPopoverController: -(void)takePicture:(id)sender{ UIImagePickerController *picker=[[UIImagePickerController alloc] init]; picker.delegate=self; picker.sourceType=UIImagePickerControllerSourceTypeCamera; picker.allowsEditing=YES; UIPopoverController *poc=[[UIPopoverController alloc] initWithContentViewController:picker]; [poc presentPopoverFromBarButtonItem:bbItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO]; } ตั้งแต่ครั้งแรกที่ฉัน[UIPopoveController dealloc]ไปถึงในขณะที่ ... เกิดข้อผิดพลาดและโปรแกรมขัดข้อง ฉันไม่ได้ทำการเก็บรักษาปล่อยหรือปล่อยอัตโนมัติตาม ARC มีการพิจารณาเป็นพิเศษUIPopoverControllersเมื่อได้รับประโยชน์จาก ARC หรือไม่?

4
สารระเหยมีราคาแพงหรือไม่?
หลังจากอ่านตำรา JSR-133 สำหรับนักเขียนคอมไพเลอร์เกี่ยวกับการใช้สารระเหยโดยเฉพาะส่วน "การโต้ตอบกับคำแนะนำเกี่ยวกับอะตอม" ฉันคิดว่าการอ่านตัวแปรระเหยโดยไม่ต้องอัปเดตจำเป็นต้องมี LoadLoad หรือ LoadStore barrier ถัดไปในหน้าฉันเห็นว่า LoadLoad และ LoadStore นั้นไม่มีประสิทธิภาพบนซีพียู X86 นี่หมายความว่าการดำเนินการอ่านแบบระเหยสามารถทำได้โดยไม่ต้องมีการยกเลิกแคชอย่างชัดเจนบน x86 และเร็วเท่ากับการอ่านตัวแปรปกติ (โดยไม่คำนึงถึงข้อ จำกัด ในการจัดลำดับใหม่ของการระเหย)? ฉันเชื่อว่าฉันเข้าใจสิ่งนี้ไม่ถูกต้อง มีใครสนใจที่จะสอนฉันได้ไหม แก้ไข: ฉันสงสัยว่ามีความแตกต่างในสภาพแวดล้อมแบบมัลติโปรเซสเซอร์หรือไม่ ในระบบ CPU เดียว CPU อาจมองว่าเป็นเธรดแคชของตัวเองตามที่สถานะของ John V. แต่ในระบบ CPU หลายระบบจะต้องมีตัวเลือกการกำหนดค่าบางอย่างให้กับ CPU ซึ่งไม่เพียงพอและหน่วยความจำหลักจะต้องถูกกระทบทำให้ระเหยช้าลง ในระบบ multi cpu ใช่ไหม? PS: ระหว่างทางเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ฉันสะดุดเกี่ยวกับบทความดีๆต่อไปนี้และเนื่องจากคำถามนี้อาจน่าสนใจสำหรับคนอื่นฉันจะแชร์ลิงก์ของฉันที่นี่: ทฤษฎีและการปฏิบัติ Java: การแก้ไข Java Memory Model ตอนที่ …


7
แนวทางปฏิบัติที่ดีที่สุดสำหรับ iOS 5 (ปล่อย / คงไว้?)
ในฐานะที่เป็นโปรแกรมเมอร์ iPhone เริ่มต้นแนวทางปฏิบัติที่ดีที่สุดในการเขียนแอพเพื่อใช้กับ iOS 5 หรือเวอร์ชันเก่ากว่าคืออะไร โดยเฉพาะอย่างยิ่งฉันควรใช้การเผยแพร่ / การเก็บรักษาข้อมูลต่อไปหรือฉันควรเพิกเฉยต่อสิ่งนั้น มันสำคัญหรือไม่?

11
วิธีรับการใช้งานหน่วยความจำปัจจุบันใน Android
ฉันใช้ / proc / meminfo และการตอบสนองคำสั่งที่แยกวิเคราะห์แล้วอย่างไรก็ตามผลลัพธ์แสดงให้เห็นว่า: MemTotal: 94348 kB MemFree: 5784 kB หมายถึง. มันแสดงให้เห็นว่ามีหน่วยความจำว่างเพียง 5MB เป็นไปได้ไหมกับมือถือ android? มีเพียง 5-6 แอปพลิเคชันที่ติดตั้งบนมือถือของฉันและไม่มีงานอื่นกำลังทำงานอยู่ แต่คำสั่งนี้ยังคงแสดงว่ามีหน่วยความจำว่างน้อยมาก ใครสามารถชี้แจงเรื่องนี้ได้บ้าง? หรือมีวิธีอื่นในการใช้หน่วยความจำใน Android หรือไม่?

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