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

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

27
กองและกองคืออะไรและอยู่ที่ไหน
หนังสือภาษาการเขียนโปรแกรมอธิบายว่าชนิดของค่าถูกสร้างขึ้นบนสแต็กและประเภทการอ้างอิงจะถูกสร้างขึ้นบนฮีปโดยไม่ต้องอธิบายว่าสองสิ่งนี้คืออะไร ฉันไม่ได้อ่านคำอธิบายที่ชัดเจนเกี่ยวกับเรื่องนี้ ฉันเข้าใจว่าสแต็คคืออะไร แต่, พวกเขาอยู่ที่ไหนและอะไร (ทางกายภาพในหน่วยความจำของคอมพิวเตอร์จริง)? มีการควบคุมโดยระบบปฏิบัติการหรือภาษาที่ใช้งานในระดับเท่าใด ขอบเขตของพวกเขาคืออะไร? อะไรเป็นตัวกำหนดขนาดของแต่ละคน อะไรทำให้เร็วขึ้น

20
หน่วยความจำของตัวแปรโลคัลสามารถเข้าถึงได้นอกขอบเขตหรือไม่?
ฉันมีรหัสต่อไปนี้ #include <iostream> int * foo() { int a = 5; return &a; } int main() { int* p = foo(); std::cout << *p; *p = 8; std::cout << *p; } และรหัสกำลังทำงานโดยไม่มีข้อยกเว้นรันไทม์! ผลลัพธ์ก็คือ 58 มันจะเป็นอย่างไร หน่วยความจำของตัวแปรโลคัลไม่สามารถเข้าถึงได้นอกฟังก์ชั่นหรือไม่


18
เหตุใดโปรแกรมเมอร์ C ++ ควรลดการใช้ 'ใหม่' ให้น้อยที่สุด
ฉันสะดุดกับคำถามStack Overflow หน่วยความจำรั่วด้วย std :: string เมื่อใช้ std :: list <std :: string>และหนึ่งในความเห็นบอกว่า: หยุดใช้newมาก ฉันไม่เห็นเหตุผลที่คุณใช้ใหม่ทุกที่ที่คุณทำ คุณสามารถสร้างวัตถุตามมูลค่าในC ++และเป็นหนึ่งในข้อได้เปรียบอย่างมากสำหรับการใช้ภาษา คุณไม่ต้องจัดสรรทุกอย่างบนกอง หยุดคิดเหมือนโปรแกรมเมอร์Java ฉันไม่แน่ใจจริงๆว่าเขาหมายถึงอะไร เหตุใดจึงควรสร้างวัตถุตามค่าในC ++บ่อยที่สุดเท่าที่จะเป็นไปได้และวัตถุภายในนั้นแตกต่างกันอย่างไร ฉันตีความคำตอบผิดหรือไม่

9
ฉันจะค้นหาการใช้งานหน่วยความจำของแอปพลิเคชันของฉันใน Android ได้อย่างไร
ฉันจะค้นหาหน่วยความจำที่ใช้กับแอปพลิเคชัน Android ของฉันได้โดยทางโปรแกรมอย่างไร ฉันหวังว่าจะมีวิธีที่จะทำ นอกจากนี้ฉันจะรับหน่วยความจำฟรีของโทรศัพท์ได้อย่างไร

2
เหตุใดโปรแกรมของฉันจึงช้าเมื่อวนลูปมากกว่า 8192 องค์ประกอบ
นี่คือสารสกัดจากโปรแกรมที่เป็นปัญหา เมทริกซ์img[][]มีขนาด SIZE × SIZE และเริ่มต้นได้ที่: img[j][i] = 2 * j + i จากนั้นคุณสร้างเมทริกซ์res[][]และแต่ละฟิลด์ในที่นี้จะถูกทำให้เป็นค่าเฉลี่ยของ 9 ฟิลด์รอบ ๆ มันในเมทริกซ์ img เส้นขอบจะเหลือ 0 เพื่อความเรียบง่าย for(i=1;i<SIZE-1;i++) for(j=1;j<SIZE-1;j++) { res[j][i]=0; for(k=-1;k<2;k++) for(l=-1;l<2;l++) res[j][i] += img[j+l][i+k]; res[j][i] /= 9; } นั่นคือทั้งหมดที่มีให้กับโปรแกรม เพื่อความสมบูรณ์ 'นี่คือสิ่งที่มาก่อน ไม่มีรหัสมา อย่างที่คุณเห็นมันเป็นเพียงการเริ่มต้น #define SIZE 8192 float img[SIZE][SIZE]; // input image float res[SIZE][SIZE]; …

13
ฉันจะกำหนดขนาดของวัตถุใน Python ได้อย่างไร
ฉันต้องการทราบวิธีรับขนาดของวัตถุเช่นสตริงจำนวนเต็ม ฯลฯ ใน Python คำถามที่เกี่ยวข้อง: มีกี่ไบต์ต่อองค์ประกอบในรายการ Python (tuple) ฉันใช้ไฟล์ XML ซึ่งมีฟิลด์ขนาดที่ระบุขนาดของค่า ฉันต้องแยกวิเคราะห์ XML นี้และทำการเข้ารหัสของฉัน เมื่อฉันต้องการเปลี่ยนค่าของฟิลด์ใดฟิลด์หนึ่งฉันจะตรวจสอบฟิลด์ขนาดของค่านั้น ที่นี่ฉันต้องการเปรียบเทียบว่าค่าใหม่ที่ฉันป้อนฆ้องมีขนาดเดียวกันกับใน XML ฉันต้องตรวจสอบขนาดของค่าใหม่ ในกรณีของสตริงฉันสามารถพูดความยาวได้ แต่ในกรณีของ int, float ฯลฯ ฉันสับสน

8
แนะนำหน่วยความจำ Python ใด? [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน6 ปีที่ผ่านมา ฉันต้องการทราบการใช้หน่วยความจำของแอปพลิเคชั่น Python ของฉันและต้องการทราบว่าการบล็อกโค้ด / ส่วนหรือวัตถุใดที่ใช้หน่วยความจำมากที่สุด การค้นหาของ Google แสดงโฆษณาหนึ่งคือPython Memory Validator (Windows เท่านั้น) และคนที่มาเปิดPySizerและHeapy ฉันไม่ได้ลองใครเลยฉันอยากรู้ว่าอันไหนดีที่สุดในการพิจารณา: ให้รายละเอียดมากที่สุด ฉันต้องทำอย่างน้อยหรือไม่มีการเปลี่ยนแปลงรหัสของฉัน

27
เทคนิคในการจัดการหน่วยความจำที่มีอยู่ในเซสชัน R
เทคนิคใดที่ผู้คนใช้เพื่อจัดการหน่วยความจำที่มีอยู่ของเซสชัน R แบบโต้ตอบ? ฉันใช้ฟังก์ชั่นด้านล่าง [อ้างอิงจากการโพสต์โดย Petr Pikal และ David Hinds ไปยังรายการ r-help ในปี 2004] เพื่อแสดงรายการ (และ / หรือเรียงลำดับ) วัตถุที่ใหญ่ที่สุดและบางครั้งrm()ก็เป็นไปได้ แต่ที่ผ่านมาโซลูชันที่มีประสิทธิภาพมากที่สุดคือ ... ทำงานภายใต้ Linux 64 บิตพร้อมหน่วยความจำที่เพียงพอ มีเทคนิคดีๆอื่น ๆ ที่ผู้คนต้องการแบ่งปันหรือไม่? กรุณาหนึ่งต่อโพสต์ # improved list of objects .ls.objects <- function (pos = 1, pattern, order.by, decreasing=FALSE, head=FALSE, n=5) { napply <- function(names, fn) …

4
ไบต์ส่วนตัว, ไบต์เสมือน, ชุดการทำงานคืออะไร
ฉันพยายามใช้ยูทิลิตี perfmon windows เพื่อดีบักการรั่วไหลของหน่วยความจำในกระบวนการ นี่คือวิธีที่ perfmon อธิบายข้อกำหนด: Working Setเป็นขนาดปัจจุบันเป็นไบต์ของ Working Set ของกระบวนการนี้ Working Set เป็นชุดของหน้าหน่วยความจำที่เพิ่งสัมผัสโดยเธรดในกระบวนการ หากหน่วยความจำว่างในคอมพิวเตอร์สูงกว่าขีด จำกัด หน้าเว็บจะอยู่ในชุดการทำงานของกระบวนการแม้ว่าจะไม่ได้ใช้งานก็ตาม เมื่อหน่วยความจำที่ว่างต่ำกว่าเกณฑ์หน้าจะถูกตัดออกจากชุดการทำงาน หากพวกเขาต้องการพวกเขาจะถูกนำกลับไปที่ชุดการทำงานก่อนที่จะออกจากหน่วยความจำหลัก ไบต์เสมือนเป็นขนาดปัจจุบันเป็นไบต์ของพื้นที่ที่อยู่เสมือนที่กระบวนการใช้ การใช้พื้นที่ที่อยู่เสมือนไม่จำเป็นต้องบ่งบอกถึงการใช้งานที่สอดคล้องกันของหน้าดิสก์หรือหน่วยความจำหลัก พื้นที่เสมือนมี จำกัด และกระบวนการสามารถจำกัดความสามารถในการโหลดไลบรารี Private Bytesเป็นขนาดหน่วยความจำปัจจุบันของหน่วยความจำที่กระบวนการนี้จัดสรรไว้ซึ่งไม่สามารถแชร์กับกระบวนการอื่นได้ นี่คือคำถามที่ฉันมี: เป็นไบต์ส่วนตัวที่ฉันควรวัดเพื่อให้แน่ใจว่ากระบวนการมีการรั่วไหลใด ๆ เนื่องจากไม่เกี่ยวข้องกับไลบรารีที่ใช้ร่วมกันและการรั่วไหลใด ๆ หากเกิดขึ้นจะมาจากกระบวนการเองหรือไม่ หน่วยความจำทั้งหมดที่ใช้โดยกระบวนการเป็นเท่าใด มันเป็นไบต์เสมือนหรือเป็นผลรวมของไบต์เสมือนและชุดการทำงาน มีความสัมพันธ์ระหว่างไบต์ส่วนตัว, ชุดการทำงานและไบต์เสมือนหรือไม่? มีเครื่องมืออื่นใดที่ให้แนวคิดที่ดีกว่าเกี่ยวกับการใช้หน่วยความจำหรือไม่?

19
ฉันใช้ malloc และ / หรือใหม่ในกรณีใดบ้าง
ฉันเห็นใน C ++ มีหลายวิธีในการจัดสรรและฟรีข้อมูลและฉันเข้าใจว่าเมื่อคุณโทรmallocคุณควรโทรfreeและเมื่อคุณใช้newโอเปอเรเตอร์คุณควรจับคู่deleteและเป็นความผิดพลาดในการผสมสองอย่าง (เช่นการโทรหาfree()บางสิ่งที่สร้างขึ้น กับnewผู้ดำเนินการ) แต่ฉันไม่ชัดเจนว่าควรใช้malloc/ freeและเมื่อใดควรใช้new/ deleteในโปรแกรมในโลกแห่งความเป็นจริง หากคุณเป็นผู้เชี่ยวชาญ C ++ โปรดแจ้งให้เราทราบกฎเกณฑ์หรือหลักการที่คุณปฏิบัติตามในเรื่องนี้

17
วิธีการจัดสรรหน่วยความจำที่จัดตำแหน่งโดยใช้ไลบรารีมาตรฐานเท่านั้น
ฉันเพิ่งเสร็จสิ้นการทดสอบซึ่งเป็นส่วนหนึ่งของการสัมภาษณ์งานและมีคำถามหนึ่งที่ทำให้ฉันนิ่งงันแม้กระทั่งการใช้ Google เพื่อการอ้างอิง ฉันต้องการดูว่าทีม StackOverflow สามารถทำอะไรได้บ้าง: memset_16alignedฟังก์ชั่นต้องมี 16 ตัวชี้ไบต์ชิดผ่านไปหรือมันจะผิดพลาด a) คุณจะจัดสรรหน่วยความจำ 1024 ไบต์ได้อย่างไรและจัดแนวให้เป็นเขต 16 ไบต์ b) เพิ่มหน่วยความจำหลังจากที่memset_16alignedได้ดำเนินการ { void *mem; void *ptr; // answer a) here memset_16aligned(ptr, 0, 1024); // answer b) here }

22
มีประโยชน์อะไรบ้างสำหรับ "การจัดวางใหม่"
มีใครที่นี่เคยใช้ "ตำแหน่งใหม่" ของ C ++ หรือไม่ ถ้าใช่มีไว้เพื่ออะไร ดูเหมือนว่าฉันจะเป็นประโยชน์กับฮาร์ดแวร์ที่แมปหน่วยความจำเท่านั้น

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


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