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

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

5
memory_get_peak_usage () ด้วย“ การใช้งานจริง”
หากreal_usageอาร์กิวเมนต์ถูกตั้งค่าtrueเป็น PHP DOCS บอกว่าจะได้รับขนาดจริงของหน่วยความจำที่จัดสรรจากระบบ ถ้ามันfalseจะได้รับหน่วยความจำรายงานโดยemalloc() ตัวเลือกใดตัวเลือกหนึ่งใน 2 ตัวนี้ส่งกลับค่าสูงสุด หน่วยความจำที่จัดสรรโดยสัมพันธ์กับค่าขีด จำกัด หน่วยความจำใน php.ini? ฉันต้องการทราบว่าสคริปต์ใกล้ถึงขีด จำกัด นั้นแค่ไหน

14
'System.OutOfMemoryException' ถูกโยนทิ้งไปเมื่อยังมีหน่วยความจำเหลืออยู่มากมาย
นี่คือรหัสของฉัน: int size = 100000000; double sizeInMegabytes = (size * 8.0) / 1024.0 / 1024.0; //762 mb double[] randomNumbers = new double[size]; ข้อยกเว้น: ข้อยกเว้นประเภท 'System.OutOfMemoryException' ถูกโยนทิ้ง ฉันมีหน่วยความจำ 4GB ในเครื่องนี้ 2.5GB ฟรีเมื่อฉันเริ่มการทำงานนี้มีพื้นที่ว่างเพียงพอบนพีซีอย่างชัดเจนที่จะจัดการกับตัวเลขสุ่ม 762mb ของ 100000000 ฉันต้องการจัดเก็บตัวเลขสุ่มให้ได้มากที่สุดเท่าที่จะเป็นไปได้ที่มีหน่วยความจำ เมื่อฉันไปผลิตจะมี 12GB บนกล่องและฉันต้องการใช้ประโยชน์จากมัน CLR บังคับให้ฉันใช้หน่วยความจำสูงสุดเริ่มต้นหรือไม่ และฉันจะขอเพิ่มได้อย่างไร? อัปเดต ฉันคิดว่าการแบ่งสิ่งนี้ออกเป็นชิ้นเล็ก ๆ และการเพิ่มความต้องการหน่วยความจำของฉันทีละน้อยจะช่วยได้หากปัญหาเกิดจากการแยกส่วนหน่วยความจำแต่ฉันไม่สามารถผ่านขนาด ArrayList ทั้งหมดที่มีขนาด 256mb ไม่ว่าฉันจะปรับแต่ง blockSizeก็ตาม …

2
Python มี stack / heap หรือไม่และหน่วยความจำมีการจัดการอย่างไร?
ตัวแปรและหน่วยความจำจัดการอย่างไรใน Python มีสแต็กและฮีปหรือไม่และอัลกอริทึมใดที่ใช้ในการจัดการหน่วยความจำ? จากความรู้นี้มีคำแนะนำเกี่ยวกับการจัดการหน่วยความจำสำหรับการประมวลผลข้อมูลจำนวนมากหรือไม่?

6
ความจุเริ่มต้นของเวกเตอร์ใน C ++
อะไรคือสิ่งที่capacity()ของstd::vectorซึ่งถูกสร้างขึ้นโดยใช้ constuctor เริ่มต้น? ฉันรู้ว่าค่าsize()เป็นศูนย์ เราสามารถระบุว่าเวกเตอร์ที่สร้างขึ้นเริ่มต้นไม่เรียกการจัดสรรหน่วยความจำฮีปได้หรือไม่? std::vector<int> iv; iv.reserve(2345);วิธีนี้มันจะเป็นไปได้ที่จะสร้างอาร์เรย์ที่มีสำรองโดยพลการโดยใช้การจัดสรรเดียวเช่น สมมติว่าด้วยเหตุผลบางประการฉันไม่ต้องการเริ่มsize()วันที่ 2345 ตัวอย่างเช่นบน Linux (g ++ 4.4.5, kernel 2.6.32 amd64) #include <iostream> #include <vector> int main() { using namespace std; cout << vector<int>().capacity() << "," << vector<int>(10).capacity() << endl; return 0; } 0,10ถูกพิมพ์ เป็นกฎหรือไม่หรือผู้ขาย STL ขึ้นอยู่กับ?

11
วิธีรับการใช้หน่วยความจำในรันไทม์โดยใช้ C ++
ฉันต้องการรับ VIRT การใช้งาน mem และ RES ณ เวลาทำงานของโปรแกรมของฉันและแสดง สิ่งที่ฉันพยายามจนถึงตอนนี้: getrusage ( http://linux.die.net/man/2/getrusage ) int who = RUSAGE_SELF; struct rusage usage; int ret; ret=getrusage(who,&usage); cout<<usage.ru_maxrss; แต่ฉันจะได้ 0 เสมอ

3
คำเตือนหน่วยความจำ iPhone OS ระดับต่างๆหมายถึงอะไร?
เกี่ยวกับศิลปะสีดำในการจัดการหน่วยความจำบนอุปกรณ์ iPhone OS: คำเตือนระดับต่างๆของหน่วยความจำหมายถึงอะไร ระดับ 1? ระดับ 2? หน้าปัดไปที่ 11 หรือไม่? บริบท: หลังจากช่วงเวลาทดสอบความเครียดของหน่วยความจำที่ยาวนาน - รวมถึงการใช้งานแอพ iPad ของฉันด้วยการเล่นแอพเครื่องเล่นเพลง iPod ฉันมีแนวโน้มที่จะเพิกเฉยต่อคำเตือนหน่วยความจำแบบสุ่ม แต่ไม่บ่อยนักที่ฉันได้รับ แอพของฉันไม่เคยล่ม เคย. แอปของฉันไม่มีการรั่วไหล และคำเตือนของ mems ก็ดูเหมือนจะไม่สำคัญ ขอบคุณ Doug

6
ทำไมฉันถึงต้องใช้ std :: get_tem Contemporary_buffer?
ควรใช้เพื่อวัตถุประสงค์std::get_temporary_bufferอะไร? Standard กล่าวต่อไปนี้: รับตัวชี้ไปยังหน่วยเก็บข้อมูลที่เพียงพอสำหรับจัดเก็บวัตถุ T ที่อยู่ติดกันได้สูงสุด n ตัว ฉันคิดว่าบัฟเฟอร์จะถูกจัดสรรบนสแต็ก แต่นั่นไม่เป็นความจริง ตามมาตรฐาน C ++ บัฟเฟอร์นี้ไม่ได้เกิดขึ้นชั่วคราว ฟังก์ชันนี้มีข้อดีอะไรบ้างเมื่อเทียบกับฟังก์ชันโกลบอล::operator newซึ่งไม่ได้สร้างอ็อบเจกต์ด้วย ฉันคิดถูกหรือไม่ที่ข้อความต่อไปนี้เทียบเท่า int* x; x = std::get_temporary_buffer<int>( 10 ).first; x = static_cast<int*>( ::operator new( 10*sizeof(int) ) ); ฟังก์ชันนี้มีเฉพาะสำหรับน้ำตาลไวยากรณ์หรือไม่? ทำไมถึงมีtemporaryชื่อ? มีการแนะนำกรณีการใช้งานหนึ่งกรณีในวารสารของดร. ด็อบบ์วันที่ 1 กรกฎาคม พ.ศ. 2539สำหรับการใช้อัลกอริทึม: หากไม่สามารถจัดสรรบัฟเฟอร์ได้หรือมีขนาดเล็กกว่าที่ร้องขออัลกอริทึมยังคงทำงานได้อย่างถูกต้องเพียงแค่ช้าลงเท่านั้น

12
เหตุใด "อิสระ" ใน C จึงไม่ใช้จำนวนไบต์ที่จะทำให้เป็นอิสระ
เพื่อความชัดเจน: ฉันรู้mallocและfreeนำไปใช้ในไลบรารี C ซึ่งโดยปกติจะจัดสรรหน่วยความจำจากระบบปฏิบัติการและทำการจัดการของตัวเองเพื่อจัดเก็บหน่วยความจำจำนวนน้อยลงในแอปพลิเคชันและติดตามจำนวนไบต์ที่จัดสรร . คำถามนี้ไม่ได้เป็นวิธีการที่ไม่ฟรีรู้ว่าจะเป็นอิสระ แต่ฉันอยากรู้ว่าทำไมถึงfreeทำแบบนี้ตั้งแต่แรก ในฐานะที่เป็นภาษาระดับต่ำฉันคิดว่ามันเป็นเรื่องที่สมเหตุสมผลอย่างยิ่งที่จะขอให้โปรแกรมเมอร์ C ติดตามไม่เพียง แต่หน่วยความจำที่ได้รับการจัดสรร แต่เท่าไหร่ (อันที่จริงฉันมักจะพบว่าฉันติดตามจำนวนไบต์ malloced อยู่ดี) นอกจากนี้ยังเกิดขึ้นกับฉันที่การให้จำนวนไบต์อย่างชัดเจนfreeอาจอนุญาตให้มีการเพิ่มประสิทธิภาพประสิทธิภาพบางอย่างเช่นตัวจัดสรรที่มีพูลแยกต่างหากสำหรับขนาดการจัดสรรที่แตกต่างกันจะสามารถกำหนดพูลที่จะว่างเพียงแค่ดูที่อาร์กิวเมนต์อินพุตและ จะมีพื้นที่เหนือศีรษะโดยรวมน้อยลง ดังนั้นในระยะสั้นเหตุใดจึงถูกสร้างmallocและfreeสร้างขึ้นเช่นนี้จึงจำเป็นต้องติดตามจำนวนไบต์ที่จัดสรรไว้ภายใน เป็นเพียงอุบัติเหตุทางประวัติศาสตร์หรือไม่? การแก้ไขเล็กน้อย: มีคนไม่กี่คนที่ให้คะแนนเช่น "จะเกิดอะไรขึ้นถ้าคุณได้รับเงินจำนวนที่แตกต่างจากที่คุณจัดสรรให้" API ในจินตนาการของฉันอาจต้องการเพียงแค่หนึ่งเพื่อให้เป็นอิสระตามจำนวนไบต์ที่จัดสรร การปล่อยให้ว่างมากหรือน้อยอาจเป็นเพียง UB หรือการนำไปใช้ ฉันไม่ต้องการกีดกันการอภิปรายเกี่ยวกับความเป็นไปได้อื่น ๆ

1
ปริมาณการใช้หน่วยความจำของ GetRef (การรวบรวมขยะ) เปลี่ยนแปลงด้วย KB4525236
เราพบปัญหาหน่วยความจำไม่เพียงพอหลังจากติดตั้งKB4525236ใน Windows 2016 Servers / Windows 10 Clients GetRefแก้ไขการรักษาความปลอดภัยนี้ดูเหมือนว่าจะมีการเปลี่ยนแปลงช่วงเวลาที่หน่วยความจำที่เก็บขยะเมื่อเรียกฟังก์ชั่นผ่าน ก่อน KB4525236 แต่ละอินสแตนซ์ที่สร้างขึ้นในฟังก์ชั่นที่เรียกใช้ผ่านGetRefได้รวบรวมขยะทันทีที่ตัวแปรอินสแตนซ์ถูกตั้งค่าเป็นnothing โพสต์ KB4525236 เช่นกันสร้างขึ้นในฟังก์ชั่นที่เรียกว่าผ่านGetRefยังคงอยู่ในหน่วยความจำและเก็บขยะเฉพาะเมื่อเสร็จสมบูรณ์ทั้งฟังก์ชั่น เมื่อสร้างอินสแตนซ์ในการวนซ้ำสิ่งนี้สามารถเพิ่มและนำไปสู่หน่วยความจำไม่เพียงพอโดยเฉพาะอย่างยิ่งในกระบวนการ 32 บิต คำถาม เราไม่พบสิ่งที่เกี่ยวข้องทางออนไลน์ดังนั้นเราจึงต้องการได้รับการยืนยันจากผู้อื่นที่ประสบปัญหาเดียวกัน แก้ไขรอยขีดข่วนที่: นี่เป็นปัญหาเดียวกัน แต่ยังไม่มีวิธีแก้ปัญหา ณ (vbscript.dll class_terminate bug ตั้งแต่ KB4524570 (12 พฤศจิกายน 2019) Windows 10 1903) ถ้าใครสามารถตรวจสอบและรู้วิธีแก้ปัญหาที่ใช้การได้นั่นจะยอดเยี่ยม POC สคริปต์ต่อไปนี้ทำงานบนอุปกรณ์ที่ติดตั้ง KB4525236 แสดงความแตกต่างในการรวบรวมขยะเมื่อ เรียกโดยตรง: อินสแตนซ์ที่สองถูกสร้างขึ้นหลังจากอินสแตนซ์แรกถูกทำลาย(นี่คือพฤติกรรมที่เราต้องการ) เรียกผ่านGetRef: อินสแตนซ์ที่สองถูกสร้างขึ้นก่อนที่อินสแตนซ์แรกจะถูกทำลายดังนั้นเมื่อมีสองอินสแตนซ์ที่ใช้หน่วยความจำ บันทึกเป็น: KB4525236.vbs ทำงานเป็น: wscript KB4525236.vbs Dim …

1
การเริ่มต้นวัตถุใน Java“ Foo f = new Foo ()” เป็นหลักเหมือนกับการใช้ malloc สำหรับตัวชี้ใน C หรือไม่?
ฉันพยายามที่จะเข้าใจกระบวนการจริงของการสร้างวัตถุใน Java และฉันคิดว่าภาษาการเขียนโปรแกรมอื่น ๆ จะผิดไหมถ้าสมมติว่าการเริ่มต้นวัตถุใน Java นั้นเหมือนกับเมื่อคุณใช้ malloc สำหรับโครงสร้างใน C หรือไม่? ตัวอย่าง: Foo f = new Foo(10); typedef struct foo Foo; Foo *f = malloc(sizeof(Foo)); นี่คือสาเหตุที่วัตถุถูกกล่าวว่าอยู่บนกองมากกว่ากองซ้อนหรือไม่? เพราะพวกมันเป็นเพียงตัวชี้ไปยังข้อมูล?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.