একই কোডটি ব্যবহার করার সময়, কেবলমাত্র সংকলক (একটি সি সংকলক থেকে একটি সি ++ সংকলক) পরিবর্তন করা কত মেমরি বরাদ্দ করা হবে তা পরিবর্তন করবে। আমি কেন নিশ্চিত তা নিশ্চিত নই এবং এটি আরও বুঝতে চাই। এখনও অবধি আমি যে উত্তম সাড়া পেয়েছি তা হ'ল "সম্ভবত আমি / হে স্ট্রিমস", যা খুব বর্ণনামূলক নয় এবং আমাকে সি ++ এর দিকটি "আপনি যা ব্যবহার করেন না তার জন্য অর্থ প্রদান করেন না" সম্পর্কে আমাকে অবাক করে দেয়।
আমি যথাক্রমে 7.0.1-8 এবং 8.3.0-6 সংস্করণগুলি ক্ল্যাং এবং জিসিসি সংকলকগুলি ব্যবহার করছি। আমার সিস্টেমটি সর্বশেষতম, দেবিয়ান 10 (বুস্টার) এ চলছে। মানদণ্ডগুলি Valgrind Massif এর মাধ্যমে সম্পন্ন হয়।
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
ব্যবহৃত কোডটি পরিবর্তিত হয় না, তবে আমি সি হিসাবে বা সি ++ হিসাবে সংকলন করি না কেন, এটি ভালগ্রাইন্ড বেঞ্চমার্কের ফলাফলগুলিকে পরিবর্তন করে। সংকলকগুলিতে মানগুলি অবশ্য সামঞ্জস্য থাকে। প্রোগ্রামের জন্য রানটাইম বরাদ্দ (শিখর) নিম্নলিখিত হিসাবে যান:
- জিসিসি (সি): 1,032 বাইট (1 কেবি)
- জি ++ (সি ++): 73,744 বাইট, (~ 74 কেবি)
- ঝনঝন (সি): 1,032 বাইট (1 কেবি)
- ঝাঁকুনি ++ (সি ++): 73,744 বাইট (KB 74 কেবি)
সংকলনের জন্য, আমি নিম্নলিখিত কমান্ডগুলি ব্যবহার করি:
clang -O3 -o c-clang ./main.c
gcc -O3 -o c-gcc ./main.c
clang++ -O3 -o cpp-clang ./main.cpp
g++ -O3 -o cpp-gcc ./main.cpp
ভালগ্রিন্ডের জন্য, আমি valgrind --tool=massif --massif-out-file=m_compiler_lang ./compiler-lang
প্রতিটি সংকলক এবং ভাষা চালাই , তারপরে ms_print
শিখর প্রদর্শন করার জন্য।
আমি কি এখানে কিছু ভুল করছি?
try
বৃহত্তর মেমরির পদক্ষেপের ব্যয়ে কোনও ব্লকে প্রবেশ করার কোনও পারফরম্যান্স নেই , সম্ভবত কোনও জাম্প টেবিল বা অন্য কোনও কিছু দিয়ে। ব্যতিক্রম ব্যতীত সংকলন করার চেষ্টা করুন এবং দেখুন কি প্রভাব আছে তা দেখুন। সম্পাদনা: প্রকৃতপক্ষে, পুনরাবৃত্তভাবে বিভিন্ন সি ++ বৈশিষ্ট্যগুলি অক্ষম করে দেখুন মেমরির পদক্ষেপে কী প্রভাব ফেলে তা দেখতে see
clang++ -xc
পরিবর্তে সংকলন করার সময় clang
, একই বরাদ্দটি সেখানে ছিল, যা লিঙ্কযুক্ত গ্রন্থাগারগুলির কারণে
C
মোডে ঠিক একই সংখ্যক বাইট এবং বাইটস মোডের ঠিক একই সংখ্যক উত্পন্ন করে C++
। আপনি কি প্রতিলিপি ত্রুটি করেছেন?