পাইথনের কী স্ট্যাক / হিপ রয়েছে এবং কীভাবে মেমরি পরিচালনা করা হয়?


92

পাইথনে ভেরিয়েবল এবং মেমরি কীভাবে পরিচালিত হয়? এটিতে কি একটি স্ট্যাক এবং একটি গাদা আছে এবং মেমরি পরিচালনা করতে কোন অ্যালগরিদম ব্যবহার করা হয়? এই জ্ঞানটি দেওয়া কি বিশাল সংখ্যক / ডেটা ক্রাঞ্চিংয়ের জন্য মেমরি পরিচালনার বিষয়ে কোনও সুপারিশ রয়েছে?


4
আপনি নিম্নলিখিত দুটিটি পড়তে চাইতে পারেন: foobarn باز.
07

4
পাইথন ভার / মেমরি পরিচালনার ক্ষেত্রে এমন কোনও নির্দিষ্ট সমস্যা রয়েছে যা আপনি পাইথন ডকুমেন্টেশন এবং / বা গুগলিং দ্বারা তুচ্ছভাবে আবিষ্কার করেন নি?
মার্টিন জেমস

উত্তর:


112

পাইথনে কীভাবে ভেরিয়েবল এবং মেমরি পরিচালিত হয়।

অটোমেগালি! না, সত্যই, আপনি কেবল একটি বস্তু তৈরি করেছেন এবং পাইথন ভার্চুয়াল মেশিনটি প্রয়োজনীয় মেমরি পরিচালনা করে এবং এটি মেমরির বিন্যাসে কোথায় স্থাপন করা হবে।

এটিতে কি একটি স্ট্যাক এবং একটি গাদা রয়েছে এবং মেমরি পরিচালনা করতে কোন অ্যালগরিদম ব্যবহার করা হয়?

আমরা যখন CPythonএটির বিষয়ে কথা বলি তখন অবজেক্টগুলি সঞ্চয় করার জন্য একটি ব্যক্তিগত গাদা ব্যবহার করে। সিপিথন সি এপিআই ডকুমেন্টেশন থেকে :

পাইথনের মেমোরি পরিচালনার সাথে সমস্ত পাইথন অবজেক্ট এবং ডেটা স্ট্রাকচার যুক্ত একটি ব্যক্তিগত গাদা জড়িত। পাইথন মেমরি পরিচালকের মাধ্যমে এই ব্যক্তিগত স্তূপের অভ্যন্তরীণভাবে নিশ্চিত করা হয়েছে। পাইথন মেমোরি ম্যানেজারের বিভিন্ন উপাদান রয়েছে যা বিভিন্ন গতিশীল স্টোরেজ পরিচালনার দিকগুলি ভাগ করে নেওয়ার, বিভাগকরণ, পূর্বনির্ধারণ বা ক্যাচিংয়ের সাথে কাজ করে।

মেমরি পুনরুদ্ধার বেশিরভাগ ক্ষেত্রে রেফারেন্স গণনা দ্বারা পরিচালিত হয় । এটি হ'ল পাইথন ভিএম কোনও সামগ্রীর জন্য কতগুলি রেফারেন্স উল্লেখ করে তার একটি অভ্যন্তরীণ জার্নাল রাখে এবং স্বয়ংক্রিয়ভাবে আবর্জনা সংগ্রহ করে যখন সেখানে উল্লেখ করা হয় না। এছাড়াও, অ্যাক্সেসযোগ্য "দ্বীপপুঞ্জ" অবজেক্টগুলির সনাক্তকরণের মাধ্যমে বিজ্ঞপ্তিযুক্ত রেফারেন্সগুলি (যা রেফারেন্স গণনা পরিচালনা করতে পারে না) ভাঙ্গার একটি প্রক্রিয়া রয়েছে , কিছুটা প্রথাগত জিসি অ্যালগরিদমগুলির বিপরীতে যা সমস্ত পৌঁছনীয় অবজেক্টগুলি সন্ধান করার চেষ্টা করে।

দ্রষ্টব্য: দয়া করে মনে রাখবেন যে এই তথ্যটিCPythonনির্দিষ্ট। যেমন অন্য পাইথন বাস্তবায়নের,pypy,iron python,jythonএবং অন্যদের পরস্পর থেকে CPython থেকে ভিন্ন হতে পারে যখন তা তাদের বাস্তবায়ন সুনির্দিষ্ট আসে। এটি আরও ভালভাবে বুঝতে, এটি বুঝতে সাহায্য করতে পারে পাইথনের শব্দার্থবিজ্ঞানের (ভাষা) এবং অন্তর্নিহিত প্রয়োগের মধ্যে পার্থক্য রয়েছে

এই জ্ঞানটি দেওয়া কি বিশাল সংখ্যক / ডেটা ক্রাঞ্চিংয়ের জন্য মেমরি পরিচালনার বিষয়ে কোনও সুপারিশ রয়েছে?

এখন আমি এ সম্পর্কে কথা বলতে পারি না, তবে আমি নিশ্চিত যে নুমপি (সংখ্যা ক্রাঞ্চিংয়ের জন্য সর্বাধিক জনপ্রিয় পাইথন লাইব্রেরি) এমন এমন ব্যবস্থা আছে যা মেমরির ব্যবহারটি কৌতুকপূর্ণভাবে পরিচালনা করে।

আপনি যদি পাইথনের অভ্যন্তরীণ সম্পর্কে আরও জানতে চান তবে এই সংস্থানগুলি দেখুন:


4
আপনার পক্ষে ভাল আপনি পাইথন বনাম
সিপিথনের

4
নোট করুন যে স্থানীয় ভেরিয়েবলগুলিতে স্ট্যাক ফ্রেমের সমতুল্য প্রকৃত ভেরিয়েবলগুলি সংরক্ষণ করা হবে।
মার্সিন

4
পাইথন জাভা নয়; এটির ভার্চুয়াল মেশিন নেই; এটির একজন দোভাষী রয়েছে। এটি পয়েন্টিংটি প্যাডেন্টিক বলে মনে হতে পারে তবে তারা দুটি পৃথক দৃষ্টান্ত এবং কোডটি কীভাবে সংকলন করা হয় এবং চালিত হয় তার জন্য পার্থক্যের গুরুত্বপূর্ণ প্রভাব রয়েছে। stackoverflow.com/questions/441824/...
Apollo2020

49

পাইথন নেই কোন ধরনের জিনিস।

পাইথন হল ভাষা এবং পাইথনের দ্বারা নির্ধারিত শব্দার্থক শব্দগুলি কীভাবে বাস্তবায়ন করতে হবে তা নির্দিষ্ট করে না ।

প্রতিটি বাস্তবায়ন (সিপিথন, পাইপাই , আয়রন পাইথন , স্ট্যাকলেস , জাইথন ...) নিজস্ব কাজটি করতে নিখরচায়!

ইন সি পাইথন, সব বস্তু গাদা উপর বাস:

পাইথনের মেমোরি পরিচালনার সাথে সমস্ত পাইথন অবজেক্ট এবং ডেটা স্ট্রাকচার যুক্ত একটি ব্যক্তিগত গাদা জড়িত।

সিপিথন ভার্চুয়াল মেশিনটি স্ট্যাক ভিত্তিক:

>>> def g():
    x = 1
    y = 2
    return f(x, y)

>>> import dis
>>> dis.dis(g)
  2           0 LOAD_CONST           1 (1) # Push 1 onto the stack
              3 STORE_FAST           0 (x) # Stores top of stack into local var x

  3           6 LOAD_CONST           2 (2) # Push 2 onto stack
              9 STORE_FAST           1 (y) # Store TOS into local var y

  4          12 LOAD_GLOBAL          0 (f) # Push f onto stack
             15 LOAD_FAST            0 (x) # Push x onto stack
             18 LOAD_FAST            1 (y) # Push y onto stack
             21 CALL_FUNCTION        2     # Execute function with 2 
                                           # f's return value is pushed on stack
             24 RETURN_VALUE               # Return TOS to caller (result of f)

মনে রাখবেন, এটি সিপিথন নির্দিষ্ট। স্ট্যাকটিতে প্রকৃত মানগুলি অন্তর্ভুক্ত নয় যদিও এটি objects অবজেক্টের রেফারেন্স রাখে।

1 : উত্স

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.