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

ใช้แท็กนี้สำหรับการจัดการหน่วยความจำหรือปัญหาในการเขียนโปรแกรม สำหรับคำถามเกี่ยวกับปัญหาฮาร์ดแวร์หน่วยความจำหรือข้อผิดพลาดในซอฟต์แวร์ทั่วไปให้ไปที่ https://superuser.com หรือ https://serverfault.com หากเกี่ยวข้องกับฮาร์ดแวร์หรือซอฟต์แวร์ระดับองค์กร

21
เหตุใดจึงใช้ศูนย์ที่อยู่สำหรับตัวชี้ค่าว่าง
ใน C (หรือ C ++ สำหรับเรื่องนั้น) พอยน์เตอร์มีความพิเศษหากมีค่าเป็นศูนย์: ฉันขอแนะนำให้ตั้งค่าพอยน์เตอร์เป็นศูนย์หลังจากปลดปล่อยหน่วยความจำเพราะหมายความว่าการปล่อยพอยน์เตอร์อีกครั้งจะไม่เป็นอันตราย เมื่อฉันเรียก malloc มันจะส่งคืนตัวชี้ที่มีค่าเป็นศูนย์หากไม่สามารถรับหน่วยความจำได้ ฉันใช้if (p != 0)เวลาทั้งหมดเพื่อให้แน่ใจว่าพอยน์เตอร์ที่ผ่านนั้นถูกต้อง ฯลฯ แต่เนื่องจากการกำหนดแอดเดรสหน่วยความจำเริ่มต้นที่ 0 จึงไม่ใช่ที่อยู่ที่ถูกต้องเหมือนที่อยู่อื่น ๆ ใช่หรือไม่? 0 จะใช้ในการจัดการตัวชี้ค่าว่างได้อย่างไรหากเป็นเช่นนั้น เหตุใดจำนวนลบจึงไม่เป็นค่าว่างแทน แก้ไข: คำตอบที่ดีมากมาย ฉันจะสรุปสิ่งที่พูดในคำตอบที่แสดงในขณะที่ใจของฉันตีความมันและหวังว่าชุมชนจะแก้ไขฉันหากฉันเข้าใจผิด เช่นเดียวกับสิ่งอื่น ๆ ในการเขียนโปรแกรมมันเป็นนามธรรม เพียงแค่คงไม่เกี่ยวข้องจริงๆที่จะอยู่ 0. C ++ 0x nullptrเน้นนี้โดยการเพิ่มคำหลัก มันไม่ได้เป็นนามธรรมที่อยู่ แต่เป็นค่าคงที่ที่กำหนดโดยมาตรฐาน C และคอมไพเลอร์สามารถแปลเป็นจำนวนอื่นได้ตราบเท่าที่ตรวจสอบให้แน่ใจว่าจะไม่เท่ากับที่อยู่ "จริง" และเท่ากับพอยน์เตอร์ว่างอื่น ๆ หาก 0 ไม่ใช่ คุ้มค่าที่สุดที่จะใช้สำหรับแพลตฟอร์ม ในกรณีที่ไม่ใช่สิ่งที่เป็นนามธรรมซึ่งในช่วงแรก ๆ ระบบจะใช้แอดเดรส …
121 c++  c  memory  pointers 

5
Java ใช้หน่วยความจำมากกว่าขนาดฮีป (หรือขนาดที่ถูกต้อง จำกัด หน่วยความจำ Docker)
สำหรับแอปพลิเคชันของฉันหน่วยความจำที่ใช้โดยกระบวนการ Java นั้นมากกว่าขนาดฮีปมาก ระบบที่คอนเทนเนอร์กำลังทำงานอยู่เริ่มมีปัญหาหน่วยความจำเนื่องจากคอนเทนเนอร์ใช้หน่วยความจำมากกว่าขนาดฮีปมาก ขนาดฮีปตั้งไว้ที่ 128 MB ( -Xmx128m -Xms128m) ในขณะที่คอนเทนเนอร์ใช้หน่วยความจำสูงสุด 1GB ภายใต้สภาวะปกติต้องใช้ 500MB หากคอนเทนเนอร์นักเทียบท่ามีขีด จำกัด ด้านล่าง (เช่นmem_limit=mem_limit=400MB) กระบวนการจะถูกฆ่าโดยนักฆ่าหน่วยความจำที่ไม่เพียงพอของระบบปฏิบัติการ คุณช่วยอธิบายได้ไหมว่าทำไมกระบวนการ Java ถึงใช้หน่วยความจำมากกว่าฮีป วิธีปรับขนาดขีด จำกัด หน่วยความจำ Docker ให้ถูกต้อง มีวิธีลดรอยเท้าหน่วยความจำนอกฮีปของกระบวนการ Java หรือไม่? ผมรวบรวมรายละเอียดบางอย่างเกี่ยวกับปัญหาการใช้คำสั่งจากการติดตามหน่วยความจำพื้นเมืองใน JVM จากระบบโฮสต์ฉันได้รับหน่วยความจำที่คอนเทนเนอร์ใช้ $ docker stats --no-stream 9afcb62a26c8 CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET …
119 java  linux  docker  memory  jvm 

15
เหตุใดพอยน์เตอร์จึงไม่เริ่มต้นด้วย NULL ตามค่าเริ่มต้น
ใครช่วยอธิบายได้NULLไหมว่าทำไมพอยน์เตอร์ถึงไม่เริ่มต้น ตัวอย่าง: void test(){ char *buf; if (!buf) // whatever } โปรแกรมจะไม่เข้าไปใน if เพราะbufไม่ใช่โมฆะ ฉันต้องการทราบว่าเหตุใดเราจึงต้องมีตัวแปรที่มีถังขยะอยู่ในกรณีใดตัวชี้พิเศษที่ระบุถึงถังขยะในหน่วยความจำ

7
ขนาดในหน่วยความจำของโครงสร้าง Python
มีการอ้างอิงขนาดหน่วยความจำของโครงสร้างข้อมูล Python บนแพลตฟอร์ม 32- และ 64 บิตหรือไม่ ถ้าไม่เช่นนั้นก็คงจะดีถ้ามีใน SO ยิ่งละเอียดยิ่งดี! โครงสร้าง Python ต่อไปนี้ใช้กี่ไบต์ (ขึ้นอยู่กับlenและประเภทเนื้อหาเมื่อเกี่ยวข้อง) int float การอ้างอิง str สตริง Unicode tuple list dict set array.array numpy.array deque วัตถุคลาสรูปแบบใหม่ วัตถุคลาสแบบเก่า ... และทุกสิ่งที่ฉันลืม! (สำหรับคอนเทนเนอร์ที่เอาแต่อ้างอิงไปยังออบเจ็กต์อื่นเราไม่ต้องการนับขนาดของรายการด้วยตนเองเนื่องจากอาจมีการแชร์) นอกจากนี้ยังมีวิธีรับหน่วยความจำที่อ็อบเจ็กต์ใช้ในรันไทม์ (เรียกซ้ำหรือไม่)?

9
ความจำรั่วไหลไปได้ไกลแค่ไหน?
ฉันเจอปัญหาหน่วยความจำรั่วหลายครั้ง โดยปกติเมื่อฉันรู้สึกmallocเหมือนไม่มีวันพรุ่งนี้หรือห้อยโหนFILE *เหมือนซักผ้าสกปรก โดยทั่วไปฉันถือว่า (อ่าน: หวังเป็นอย่างยิ่ง) ว่าหน่วยความจำทั้งหมดจะถูกล้างอย่างน้อยที่สุดเมื่อโปรแกรมสิ้นสุดลง มีสถานการณ์ใดบ้างที่จะไม่รวบรวมหน่วยความจำที่รั่วไหลเมื่อโปรแกรมหยุดทำงานหรือล่ม? หากคำตอบแตกต่างกันอย่างมากในแต่ละภาษาให้เน้นที่ C (++) โปรดสังเกตการใช้วลีที่เกินความจริงเช่น 'เหมือนไม่มีวันพรุ่งนี้' และ 'ห้อย ... เหมือนซักผ้าสกปรก' ความไม่ปลอดภัย * malloc* อาจทำร้ายคนที่คุณรักได้ นอกจากนี้โปรดใช้ความระมัดระวังในการซักผ้าที่สกปรก
118 c++  c  memory  memory-leaks 


8
กระบวนการย่อยของ Python เปิด“ OSError: [Errno 12] ไม่สามารถจัดสรรหน่วยความจำได้”
หมายเหตุ:คำถามนี้เดิมถูกถามที่นี่แต่เวลาของรางวัลหมดลงแม้ว่าจะไม่พบคำตอบที่ยอมรับได้ก็ตาม ฉันกำลังถามคำถามนี้อีกครั้งรวมถึงรายละเอียดทั้งหมดที่ให้ไว้ในคำถามเดิม สคริปต์ python กำลังรันชุดฟังก์ชันคลาสทุกๆ 60 วินาทีโดยใช้โมดูลsched : # sc is a sched.scheduler instance sc.enter(60, 1, self.doChecks, (sc, False)) สคริปต์ที่ทำงานเป็นกระบวนการ daemonised โดยใช้รหัสที่นี่ เมธอดคลาสจำนวนหนึ่งที่เรียกว่าเป็นส่วนหนึ่งของ doChecks ใช้โมดูลกระบวนการย่อยเพื่อเรียกใช้ฟังก์ชันระบบเพื่อรับสถิติของระบบ: ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0] สิ่งนี้ทำงานได้ดีในช่วงเวลาหนึ่งก่อนที่สคริปต์ทั้งหมดจะหยุดทำงานโดยมีข้อผิดพลาดต่อไปนี้: File "/home/admin/sd-agent/checks.py", line 436, in getProcesses File "/usr/lib/python2.4/subprocess.py", line 533, in __init__ File "/usr/lib/python2.4/subprocess.py", line 835, in _get_handles OSError: …
114 python  linux  memory 

5
ฉันจะปล่อยหน่วยความจำที่ใช้โดยแพนด้าดาต้าเฟรมได้อย่างไร
ฉันมีไฟล์ csv ขนาดใหญ่มากที่ฉันเปิดในแพนด้าดังนี้ .... import pandas df = pandas.read_csv('large_txt_file.txt') เมื่อฉันทำสิ่งนี้การใช้หน่วยความจำของฉันจะเพิ่มขึ้น 2GB ซึ่งคาดว่าเป็นเพราะไฟล์นี้มีแถวหลายล้านแถว ปัญหาของฉันเกิดขึ้นเมื่อฉันต้องปล่อยหน่วยความจำนี้ ฉันวิ่ง .... del df อย่างไรก็ตามการใช้งานหน่วยความจำของฉันไม่ลดลง นี่เป็นแนวทางที่ไม่ถูกต้องในการปล่อยหน่วยความจำที่ใช้โดยกรอบข้อมูลแพนด้าหรือไม่? ถ้าเป็นเช่นนั้นวิธีที่เหมาะสมคืออะไร?
113 python  pandas  memory 

6
การใช้หน่วยความจำสูงสุดของ MySQL
ฉันต้องการทราบว่าเป็นไปได้อย่างไรในการกำหนดขีด จำกัด สูงสุดของจำนวนหน่วยความจำที่ MySQL ใช้บนเซิร์ฟเวอร์ Linux ตอนนี้ MySQL จะใช้หน่วยความจำต่อไปเมื่อมีการร้องขอใหม่ทุกครั้งเพื่อให้หน่วยความจำหมดในที่สุด มีวิธีกำหนดวงเงินเพื่อไม่ให้ MySQL ใช้เกินจำนวนนั้นหรือไม่?
111 mysql  memory  ram 

9
การลดการใช้หน่วยความจำของแอพพลิเคชั่น. NET?
มีเคล็ดลับอะไรบ้างในการลดการใช้หน่วยความจำของแอปพลิเคชัน. NET พิจารณาโปรแกรม C # อย่างง่ายต่อไปนี้ class Program { static void Main(string[] args) { Console.ReadLine(); } } คอมไพล์ในโหมดรีลีสสำหรับx64และรันนอก Visual Studio ตัวจัดการงานรายงานสิ่งต่อไปนี้: Working Set: 9364k Private Working Set: 2500k Commit Size: 17480k จะดีกว่าเล็กน้อยถ้าคอมไพล์สำหรับx86 : Working Set: 5888k Private Working Set: 1280k Commit Size: 7012k จากนั้นฉันลองใช้โปรแกรมต่อไปนี้ซึ่งทำเหมือนกัน แต่พยายามตัดขนาดของกระบวนการหลังจากการเริ่มต้นรันไทม์: class Program { static void …

2
อะไรคือความแตกต่างระหว่างอาร์เรย์ที่ต่อเนื่องกันและไม่ต่อเนื่องกัน?
ในคู่มือ numpyเกี่ยวกับฟังก์ชัน reshape () ระบุว่า >>> a = np.zeros((10, 2)) # A transpose make the array non-contiguous >>> b = a.T # Taking a view makes it possible to modify the shape without modifying the # initial object. >>> c = b.view() >>> c.shape = (20) AttributeError: incompatible shape for …
108 python  arrays  numpy  memory 

8
อะไรคือความแตกต่างระหว่างตัวดำเนินการกำหนดและตัวสร้างการคัดลอก?
ฉันไม่เข้าใจความแตกต่างระหว่างตัวสร้างการกำหนดและตัวสร้างการคัดลอกใน C ++ มันเป็นเช่นนี้: class A { public: A() { cout << "A::A()" << endl; } }; // The copy constructor A a = b; // The assignment constructor A c; c = a; // Is it right? ฉันต้องการทราบวิธีการจัดสรรหน่วยความจำของตัวสร้างการกำหนดและตัวสร้างการคัดลอก?
107 c++  memory 

6
วิธีที่เร็วที่สุดในการแปลง Image เป็น Byte array
ฉันกำลังสร้างแอปพลิเคชันการแชร์เดสก์ท็อประยะไกลซึ่งฉันจับภาพของเดสก์ท็อปและบีบอัดและส่งไปยังเครื่องรับ ในการบีบอัดภาพฉันต้องแปลงเป็นไบต์ [] ตอนนี้ฉันกำลังใช้สิ่งนี้: public byte[] imageToByteArray(System.Drawing.Image imageIn) { MemoryStream ms = new MemoryStream(); imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif); return ms.ToArray(); } public Image byteArrayToImage(byte[] byteArrayIn) { MemoryStream ms = new MemoryStream(byteArrayIn); Image returnImage = Image.FromStream(ms); return returnImage; } แต่ฉันไม่ชอบเพราะฉันต้องบันทึกใน ImageFormat และอาจใช้ทรัพยากร (ช้าลง) รวมทั้งให้ผลลัพธ์การบีบอัดที่แตกต่างกันฉันได้อ่านเกี่ยวกับการใช้ Marshal Copy และ memcpy แต่ฉันไม่สามารถทำได้ เข้าใจพวกเขา แล้วมีวิธีอื่นอีกไหมที่จะบรรลุเป้าหมายนี้?
106 c#  memory  bitmap  bytearray 

9
การแปลงไบต์เป็นเมกะไบต์
ฉันได้เห็นสามวิธีในการแปลงจากไบต์เป็นเมกะไบต์: เมกะไบต์ = ไบต์ / 1000000 เมกะไบต์ = ไบต์ / 1024/1024 เมกะไบต์ = ไบต์ / 1024 / 1,000 ตกลงฉันคิดว่า # 3 ผิดทั้งหมด แต่ฉันได้เห็นแล้ว ฉันคิดว่า # 2 ถูกต้อง แต่ฉันกำลังมองหาผู้มีอำนาจที่น่านับถือ (เช่น W3C, ISO, NIST ฯลฯ ) เพื่อชี้แจงว่าเมกะไบต์ใดเป็นเมกะไบต์ที่แท้จริง ใครสามารถอ้างอิงแหล่งที่มาที่อธิบายอย่างชัดเจนว่าการคำนวณนี้ทำอย่างไร คำถามโบนัส: ถ้า # 2 เป็นเมกะไบต์ # 1 และ # 3 จะเรียกว่าอะไร? BTW: ผู้ผลิตฮาร์ดไดรฟ์ไม่นับเป็นหน่วยงานนี้!

13
หน่วยความจำสูงสุดของ Java บน Windows XP
ฉันสามารถจัดสรร 1400 เมกะไบต์สำหรับ Java SE ที่ทำงานบน Windows XP แบบ 32 บิต (Java 1.4, 1.5 และ 1.6) ได้เสมอ java -Xmx1400m ... วันนี้ฉันลองใช้ตัวเลือกเดียวกันในเครื่อง Windows XP ใหม่โดยใช้ Java 1.5_16 และ 1.6.0_07 และได้รับข้อผิดพลาด: Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine. …
103 java  windows  memory 

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