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

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

6
ตัวแปรสมาชิกที่ไม่ได้ใช้ใช้หน่วยความจำหรือไม่?
การเตรียมใช้งานตัวแปรสมาชิกและไม่อ้างถึง / ใช้งานจะใช้ RAM เพิ่มเติมในระหว่างรันไทม์หรือคอมไพเลอร์ไม่สนใจตัวแปรนั้น struct Foo { int var1; int var2; Foo() { var1 = 5; std::cout << var1; } }; ในตัวอย่างข้างต้นสมาชิก 'var1' จะได้รับค่าที่แสดงในคอนโซล อย่างไรก็ตาม 'Var2' ไม่ได้ใช้เลย ดังนั้นการเขียนลงในหน่วยความจำระหว่างรันไทม์จะเป็นการสิ้นเปลืองทรัพยากร คอมไพลเลอร์นำสถานการณ์เหล่านี้มาใช้ในบัญชีและไม่สนใจตัวแปรที่ไม่ได้ใช้หรืออ็อบเจ็กต์ Foo มีขนาดเท่ากันเสมอไม่ว่าจะใช้สมาชิกหรือไม่
92 c++  memory  struct 

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

4
ทำไม memmove เร็วกว่า memcpy?
ฉันกำลังตรวจสอบฮอตสปอตประสิทธิภาพในแอปพลิเคชันซึ่งใช้เวลา 50% ใน memmove (3) แอปพลิเคชันจะแทรกจำนวนเต็ม 4 ไบต์นับล้านลงในอาร์เรย์ที่จัดเรียงและใช้ memmove เพื่อเลื่อนข้อมูล "ไปทางขวา" เพื่อให้มีพื้นที่ว่างสำหรับค่าที่แทรก ความคาดหวังของฉันคือการคัดลอกหน่วยความจำนั้นเร็วมากและฉันรู้สึกประหลาดใจที่ใช้เวลากับ memmove นานมาก แต่แล้วฉันก็มีความคิดว่า memmove ทำงานช้าเพราะมันกำลังเคลื่อนย้ายพื้นที่ที่ทับซ้อนกันซึ่งจะต้องดำเนินการแบบวนซ้ำแทนการคัดลอกหน่วยความจำขนาดใหญ่ ฉันเขียน microbenchmark ขนาดเล็กเพื่อดูว่ามีความแตกต่างด้านประสิทธิภาพระหว่าง memcpy และ memmove หรือไม่โดยคาดหวังว่า memcpy จะชนะมือ ฉันใช้เกณฑ์มาตรฐานบนสองเครื่อง (core i5, core i7) และเห็นว่า memmove เร็วกว่า memcpy จริง ๆ บน core i7 ที่เก่ากว่าแม้จะเร็วกว่าเกือบสองเท่า! ตอนนี้ผมกำลังหาคำอธิบาย นี่คือเกณฑ์มาตรฐานของฉัน มันคัดลอก 100 mb ด้วย memcpy จากนั้นย้ายประมาณ …
90 c++  c  performance  memory 

12
C การจัดการหน่วยความจำ
ฉันได้ยินมาตลอดว่าในภาษา C คุณต้องดูวิธีจัดการหน่วยความจำจริงๆ และฉันยังคงเริ่มเรียนรู้ C แต่จนถึงตอนนี้ฉันไม่ต้องทำกิจกรรมที่เกี่ยวข้องกับหน่วยความจำเลย .. ฉันมักจะจินตนาการว่าต้องปล่อยตัวแปรและทำสิ่งที่น่าเกลียดทุกประเภท แต่ดูเหมือนจะไม่เป็นเช่นนั้น ใครช่วยแสดงตัวอย่างเวลาที่คุณจะต้องทำ "การจัดการหน่วยความจำ" บ้าง
90 c  memory 

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

14
สแต็กเติบโตขึ้นหรือลง?
ฉันมีรหัสชิ้นนี้ใน c: int q = 10; int s = 5; int a[3]; printf("Address of a: %d\n", (int)a); printf("Address of a[1]: %d\n", (int)&a[1]); printf("Address of a[2]: %d\n", (int)&a[2]); printf("Address of q: %d\n", (int)&q); printf("Address of s: %d\n", (int)&s); ผลลัพธ์คือ: Address of a: 2293584 Address of a[1]: 2293588 Address of a[2]: 2293592 …
90 c  memory  stack 

17
นับจำนวนบรรทัดของไฟล์ข้อความได้อย่างมีประสิทธิภาพ (200mb +)
ฉันเพิ่งพบว่าสคริปต์ของฉันทำให้ฉันมีข้อผิดพลาดร้ายแรง: Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 440 bytes) in C:\process_txt.php on line 109 บรรทัดนั้นคือ: $lines = count(file($path)) - 1; ฉันคิดว่ามันมีปัญหาในการโหลดไฟล์ลงใน memeory และการนับจำนวนบรรทัดมีวิธีที่มีประสิทธิภาพมากกว่านี้ไหมที่ฉันสามารถทำได้โดยไม่ต้องมีปัญหาเรื่องหน่วยความจำ ไฟล์ข้อความที่ฉันต้องนับจำนวนบรรทัดสำหรับช่วงตั้งแต่ 2MB ถึง 500MB บางทีกิ๊ก ขอบคุณสำหรับความช่วยเหลือใด ๆ

15
คุณจะได้รับ RAM ทั้งหมดที่คอมพิวเตอร์มีได้อย่างไร?
เมื่อใช้ C # ฉันต้องการได้รับจำนวน RAM ทั้งหมดที่คอมพิวเตอร์ของฉันมี ด้วย PerformanceCounter ฉันสามารถรับจำนวน ram ที่พร้อมใช้งานได้โดยการตั้งค่า: counter.CategoryName = "Memory"; counter.Countername = "Available MBytes"; แต่ดูเหมือนฉันจะหาวิธีรับจำนวนหน่วยความจำทั้งหมดไม่ได้ ฉันจะทำสิ่งนี้ได้อย่างไร? อัปเดต: MagicKat: ฉันเห็นว่าตอนที่ฉันค้นหา แต่มันใช้ไม่ได้ - "คุณไม่มีชุดประกอบหรือข้อมูลอ้างอิงหรือไม่" ฉันต้องการเพิ่มสิ่งนั้นในการอ้างอิง แต่ฉันไม่เห็นที่นั่น


3
ทำความเข้าใจกับบันทึกของ Linux oom-killer
แอพของฉันถูกฆ่าโดย oom-killer เป็น Ubuntu 11.10 ที่ทำงานบน USB สดโดยไม่มีการแลกเปลี่ยนและพีซีมี RAM 1 Gig แอปเดียวที่ทำงานอยู่ (นอกเหนือจากสิ่งที่สร้างขึ้นใน Ubuntu ทั้งหมด) คือโปรแกรม flasherav ของฉัน โปรดทราบว่า / tmp ถูกแมปหน่วยความจำและในขณะที่เกิดปัญหามีไฟล์อยู่ในนั้นประมาณ 200MB (ดังนั้นจึงใช้ RAM มากถึง 200MB) ฉันพยายามที่จะเข้าใจวิธีวิเคราะห์บันทึก om-killer เพื่อที่ฉันจะเข้าใจว่าหน่วยความจำทั้งหมดถูกใช้ไปที่ใดนั่นคือชิ้นส่วนต่าง ๆ ที่จะรวมกันได้ถึง ~ 1 กิ๊กซึ่งส่งผลให้เกิดการเตะโอม - เพชฌฆาต ใน? เมื่อฉันเข้าใจแล้วฉันสามารถลดการใช้งานของผู้กระทำความผิดเพื่อให้แอปทำงานบนเครื่องที่มีหน่วยความจำ 1 GB คำถามเฉพาะของฉันคือ เพื่อพยายามวิเคราะห์สถานการณ์ฉันสรุปคอลัมน์ "total_vm" และฉันได้รับเพียง 609342KB (ซึ่งเมื่อเพิ่มเข้าไปใน 200MB ใน / …

3
จะแก้ไขเนื้อหาหน่วยความจำโดยใช้ GDB ได้อย่างไร
ฉันรู้ว่าเราสามารถใช้คำสั่งต่างๆเพื่อเข้าถึงและอ่านหน่วยความจำได้เช่น print, p, x ... แต่ฉันจะเปลี่ยนเนื้อหาของหน่วยความจำในตำแหน่งใดก็ได้ (ในขณะที่แก้ไขข้อบกพร่องใน GDB) ได้อย่างไร
87 c  linux  memory  gdb 

7
หน่วยความจำ 32 บิตสามารถเข้าถึงบนระบบปฏิบัติการ 64 บิตได้เท่าใด
ใน Windows ภายใต้สถานการณ์ปกติกระบวนการ 32 บิตสามารถเข้าถึง RAM ได้เพียง 2GB (หรือ 3GB พร้อมสวิตช์พิเศษในไฟล์ boot.ini) เมื่อรันกระบวนการ 32 บิตบนระบบปฏิบัติการ 64 บิตจะมีหน่วยความจำเท่าใด มีสวิตช์หรือการตั้งค่าพิเศษใดบ้างที่สามารถเปลี่ยนแปลงสิ่งนี้ได้
86 windows  memory  wow64 

1
แฟล็ก UseCompressedOops JVM ทำอะไรและฉันควรใช้เมื่อใด
แฟล็ก HotSpot JVM -XX:+UseCompressedOopsทำอะไรและฉันควรใช้เมื่อใด ฉันจะเห็นความแตกต่างของประสิทธิภาพและการใช้งานหน่วยความจำประเภทใดเมื่อใช้บนอินสแตนซ์ Java 64 บิต (เทียบกับไม่ได้ใช้งาน)
85 java  memory  jvm  jvm-hotspot 

1
เหตุใดขนาดของคลาสใน c ++ ขึ้นอยู่กับสถานะสาธารณะ / ส่วนตัวของสมาชิกข้อมูล
จากสิ่งที่ฉันรู้ขนาดของคลาสใน c ++ ขึ้นอยู่กับปัจจัยด้านล่าง - ขนาดของสมาชิกข้อมูลที่ไม่คงที่ทั้งหมด ลำดับของสมาชิกข้อมูล หากเปิดใช้งานการเสริมไบต์แล้วหรือไม่ ขนาดของคลาสฐานทันที การมีอยู่ของฟังก์ชั่นเสมือนจริง โหมดของการสืบทอด (การสืบทอดเสมือน) ตอนนี้ฉันได้สร้าง 2 ชั้นดังนี้ class A{ int a; short s; int b; char d; };// kept a char at last on purpose to leave a "hole" class B : public A{ char c; }; ตอนนี้ในการตรวจสอบขนาดของ A และ BI เห็น …

3
ที่อยู่หน่วยความจำคงที่แบบคงที่ [10] จะสิ้นสุดลงใน 060 เสมอ
ฉันมีโปรแกรม ac ที่มีลักษณะเช่นนี้ main.c #include <stdio.h> #define SOME_VAR 10 static int heap[SOME_VAR]; int main(void) { printf("%p", heap); return 0; } และส่งออกสิ่งนี้เมื่อฉันรันโปรแกรมที่คอมไพล์แล้วสองสามครั้ง 0x58aa7c49060 0x56555644060 0x2f8d1f8e060 0x92f58280060 0x59551c53060 0xd474ed6e060 0x767c4561060 0xf515aeda060 0xbe62367e060 ทำไมมันถึงลงท้ายด้วย 060 เสมอ? และอาร์เรย์เก็บไว้ในกองหรือไม่ แก้ไข: ฉันใช้ Linux และฉันเปิด ASLR ฉันรวบรวมโปรแกรมโดยใช้ gcc
17 c  arrays  memory 

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