জাভা বা পাইথন বলার তুলনায় সি বা সি ++ এর বিভিন্ন গতির যোগ্যতার বিষয়ে প্রচুর আলোচনা হয়েছে বলে মনে হয়, তবে আমি লক্ষ্য করি খুব কমই লক্ষ্য করা যায় j মোটামুটি ভাষা পারফরম্যান্সের ক্ষেত্রে এটি কোথায় পড়ে?
জাভা বা পাইথন বলার তুলনায় সি বা সি ++ এর বিভিন্ন গতির যোগ্যতার বিষয়ে প্রচুর আলোচনা হয়েছে বলে মনে হয়, তবে আমি লক্ষ্য করি খুব কমই লক্ষ্য করা যায় j মোটামুটি ভাষা পারফরম্যান্সের ক্ষেত্রে এটি কোথায় পড়ে?
উত্তর:
সি ++ এর বিপরীতে, অবজেক্টিভ-সি সি এর পরিষ্কার ক্লিন সুপারেট হিসাবে ডিজাইন করা হয়েছে আমি যে কয়েকটি ওজেক্টিভ-সি সংকলকটি ব্যবহার করেছি সেগুলি সি সংকলক হিসাবে বেশি পরিচিত, তবে উদ্দেশ্য-সিও পরিচালনা করে।
সুতরাং, কোড জেনারেশন পর্যায়ে, সি এবং উদ্দেশ্য-সি সমতুল্য তা ধরে নেওয়া নিরাপদ।
প্রথম পার্থক্যটি ওওপি এবিআইতে উপস্থিত হয়, "লেট মেথড বাইন্ডিং" নামে পরিচিত। ঠিক সি ++ এর মতোই, ওজেক্টিভ-সি সংকলক-উত্পন্ন ফাংশন পয়েন্টার টেবিলগুলিতে নির্ভর করে যা রানটাইমের সময় ট্র্যাভারস করা হয়।
সি ++ এর বিপরীতে, বাইন্ডিং পদ্ধতিটি আরও বেশি 'গতিশীল', এবং id
সর্বত্র সুপারক্লাসের ব্যবহারকে প্রচার করে , যা এটি তত্ত্বের ক্ষেত্রে সি ++ এর চেয়ে সামান্য ধীর করে তোলে। অনুশীলনে, এই পার্থক্যটি পরিমাপযোগ্যের চেয়ে কম।
অবশেষে, সবচেয়ে গুরুত্বপূর্ণ পারফরম্যান্স ইস্যুটি ব্যবহৃত গ্রন্থাগারগুলির গুণমান। যেহেতু অবজেক্টিভ-সি কেবলমাত্র অ্যাপল সিস্টেমগুলিতেই জনপ্রিয়, তাই ধরে নেওয়া উচিত যে আপনি এটি কোকো দিয়ে ব্যবহার করছেন; যা উচ্চ-স্তরের গ্রন্থাগারের একটি সূক্ষ্ম সেট। বেশিরভাগ ক্ষেত্রে, আপনি ভারী উত্তোলন তাদের কাছে ছেড়ে দিতে পারেন, সুতরাং আপনার কোডটি এত দ্রুত হওয়া উচিত নয়, বা আপনি যদি ভারী ক্রাঞ্চিং করেন তবে সম্ভবত এটি বেশিরভাগ স্থির কোড বেস হতে পারে, প্রায় সমতল সি এর মতোই similar ।
টিএল; ডিআর: সি এবং সি ++ ভাষার সাথে এটি সর্বাধিক গুরুত্বপূর্ণ যেখানে রয়েছে with আপনি যদি ভাল পারফরম্যান্স না পেয়ে থাকেন তবে আপনার অ্যালগরিদমগুলি পরীক্ষা করুন; ঠিক তেমন কোনও গুরুতর ভাষায়।
উদ্দেশ্য-সি সি / সি ++ এর চেয়ে ধীর। অবজেক্টিভ-সি-র রানটাইম হওয়ার কারণ যা রানটাইম সময়ে গতিপথভাবে পদ্ধতিগুলির অনুসন্ধানগুলি স্মলটালকের মতো প্রেরণ করে, যেখান থেকে এটি এই কার্যকরকরণের মডেলটি গ্রহণ করেছে। রানটাইমের সমস্ত পদ্ধতি প্রেরণকে সি / সি ++ তে ফাংশন কলটির বিপরীতে "সত্য বার্তা প্রেরণ" বলা হয় যেখানে ফাংশন ঠিকানাটি সংকলন সময়ে নির্ধারিত হয় (সি ++ ভার্চুয়াল পদ্ধতি ব্যতীত)। তবে আমি বলতে পারি না কতটা ধীর অবজেক্টিভ-সি হয়। এএসএইকে এটি কেবলমাত্র কার্য সম্পাদনের দন্ডের কারণে অ্যাপ্লিকেশন বিকাশের জন্য ব্যবহৃত হয়।
সংক্ষিপ্ত উত্তর: এটি সি / সি ++ / ডি / গো / জাস্ট হিসাবে অনুরূপ বিন্যাসে সংকলিত। এটি জাভা /। নেট এর মতো ভার্চুয়াল পরিবেশ ব্যবহার করে না। এবং এটি পাইথন / রুবি / লুয়া / জাভাস্ক্রিপ্টের মতো ব্যাখ্যা করা যায় না। সুতরাং এটি বর্ণালীটির দ্রুত প্রান্তে রয়েছে is
অলিভার নীচে যেমন বলেছেন ওবজ-সি এবং সি / সি ++ এর মধ্যে মৌলিক গতির পার্থক্যগুলি গতিশীল পদ্ধতির প্রেরণের কারণে।
এই প্রবন্ধে এই উপরি প্রোফাইলের OBJ-সি http://it.toolbox.com/blogs/macsploitation/bypassing-objectivecs-message-passing-mechanism-for-speed-24946
আপনি পদ্ধতি প্রেরণ নির্ধারণ করার সময় এটি আপনার ওবজ-সি কোডটি অনুকূলকরণের জন্য খুব সুন্দর কৌশল সরবরাহ করে (অর্থাত্ obc_msgSend) সীমাবদ্ধ ফ্যাক্টর - একবার ফাংশনটির একটি পয়েন্টার পান, এবং এটি বহুবার ফাংশনটিতে কল করতে ব্যবহার করুন। ওবিজে-সি রানটাইমগুলি স্বয়ংক্রিয়ভাবে এই অপটিমাইজেশনটি করায় এটিকে খুব বেশি সহায়তা করা উচিত নয় ।
মনে রাখবেন গতিশীল পদ্ধতি প্রেরণের আসল ব্যয় ক্যাশে মিসের কারণে, কারণ এটি সিপিইউ শাখার পূর্বাভাসকে ভঙ্গ করে। এগুলি প্রোফাইল করা শক্ত এবং এটি হতে পারে যে উপরে বর্ণিত কোডটি সত্যিকারের ক্যাশে মিস ব্যয়টি পরিমাপ করে না।
আরও কিছু দরকারী আলোচনা এখানে: http://www.cocoabuilder.com/archive/cocoa/106535-instance-variable-access.html#106605
নীচের লাইন: ভাষার মধ্যে সবচেয়ে বড় পার্থক্য হ'ল আপনার অ্যালগরিদম। এর বাইরে গতিশীল বা ভার্চুয়াল পদ্ধতিতে প্রেরণের কারণে ওবজ-সি, সি এবং সি ++ এর মধ্যে একটি মৌলিক গতির পার্থক্য রয়েছে। এই দ্বিতীয় পয়েন্টটি বড় বলে মনে হয় না। এবং উপরের নিবন্ধটিটিকে অনুকূল করে তোলার কৌশল দেয়, যদি আপনি প্রোফাইলের মাধ্যমে গরম দাগগুলি খুঁজে পেতে পারেন যা সিপিইউ ক্যাশে মিস করার কারণে কঠিন হতে পারে।