switch - সি এত দ্রুত কেন, এবং অন্যান্য ভাষা দ্রুত বা দ্রুত কেন নয়?




সি++ বই (20)

অন্যান্য ভাষাগুলিকে কি বাইনারি থেকে কম্পাইল করতে সক্ষম হওয়া থেকে বিরত রাখতে যা সি হিসাবে দ্রুত প্রতিটি বিট চালায়?

কিছুই নেই। জাভা বা .NET LANs এর মত আধুনিক ভাষা কর্মক্ষমতা তুলনায় প্রোগ্রামার উত্পাদনশীলতার উপর আরও বেশি ভিত্তিক। হার্ডওয়্যার এখন সস্তা। এছাড়াও মধ্যবর্তী প্রতিনিধিত্বের সংকলন নিরাপত্তা, পোর্টেবিলিটি প্রভৃতি বোনাসগুলি দেয়। নেট সিএলআর বিভিন্ন হার্ডওয়্যারগুলির সুবিধা নিতে পারে - উদাহরণস্বরূপ আপনাকে SSE নির্দেশনা সেট ব্যবহার করার জন্য ম্যানুয়ালি / অপ্টিমাইজ করার প্রোগ্রামটির প্রয়োজন নেই।

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


C ++ গড় দ্রুত (যেমন এটি প্রাথমিকভাবে সিটির একটি সুপারসেট ছিল, যদিও কিছু পার্থক্য রয়েছে)। যাইহোক, নির্দিষ্ট বেঞ্চমার্কের জন্য, আরও একটি ভাষা যা দ্রুত হয়।

https://benchmarksgame-team.pages.debian.net/benchmarksgame/

fannjuch-redux স্কালায় দ্রুততম ছিল

fasta দ্রুত n-bodyfasta ছিল।

spectral-norm দ্রুততম ছিল।

reverse-complement , pidigits এবং pidigits ATS এ দ্রুততম ছিল।

regex-dna জাভাস্ক্রিপ্ট দ্রুততম ছিল।

chameneou-redux দ্রুততম জাভা 7 ছিল।

thread-ring হ্যাসকেলে দ্রুততম ছিল।

বাকি বাছাইগুলি সি বা সি ++ এ দ্রুততম ছিল।


আমি ইতিমধ্যে এটি দেখতে পাইনি, তাই আমি এটি বলব: সি দ্রুততর হতে থাকে কারণ প্রায় সব কিছুই সি তে লেখা হয়

জাভা সি তে নির্মিত হয়, পাইথন সি (বা জাভা, বা। নেট, ইত্যাদি), পার্ল ইত্যাদিতে নির্মিত হয়। ওএসটি সি তে লেখা হয়, ভার্চুয়াল মেশিন সিতে লেখা হয়, কম্পাইলারগুলি সিতে লেখা হয়, অনুবাদক সি তে লেখা আছে কিছু জিনিস এখনও অ্যাসেম্বলি ভাষাতে লেখা হয়, যা আরও দ্রুত হতে থাকে। আরো কিছু জিনিস অন্য কিছুতে লেখা হচ্ছে, যা নিজেই সি তে লেখা আছে।

আপনি অন্যান্য ভাষাগুলিতে লিখেন এমন প্রতিটি বিবৃতি (অধিবেশনে নয়) সাধারণত সি-তে বিভিন্ন বিবৃতি হিসাবে গৃহীত হয়, যা নেটিভ মেশিন কোডে সংকলিত হয়। যেহেতু অন্যান্য ভাষাগুলি C এর চেয়ে উচ্চতর বিচ্ছিন্নতা অর্জনের জন্য বিদ্যমান থাকে, সেক্ষেত্রে সি-তে যে অতিরিক্ত বিবৃতিগুলি নিরাপত্তা প্রয়োজন, জটিলতা যুক্ত করা এবং ত্রুটির পরিচালনা প্রদানের উপর দৃষ্টি নিবদ্ধ করা হয়। যারা প্রায়ই ভাল জিনিস, কিন্তু তাদের একটি খরচ আছে , এবং তার নাম গতি এবং আকার

ব্যক্তিগতভাবে, আমি উপলব্ধ বর্ণালী সর্বাধিক বিস্তৃত ভাষায় আক্ষরিক ডজন ভাষায় লেখা আছে, এবং আমি ব্যক্তিগতভাবে যাদু আপনি যে ইঙ্গিত চাওয়া হয়েছে:

আমি কিভাবে আমার কেক আছে এবং এটি খাওয়া যাবে? আমি কিভাবে আমার প্রিয় ভাষাতে উচ্চ-স্তরীয় বিমূর্ততাগুলি দিয়ে খেলতে পারি, তারপর গতির জন্য সিটির নিকৃষ্ট বিন্দুতে নামতে পারি?

গবেষণা কয়েক বছর পর, আমার উত্তর পাইথন (সি উপর)। আপনি এটি একটি চেহারা দিতে চাই। যাইহোক, আপনি পাইথন থেকেও এসেম্বলিতেও নামতে পারেন (বিশেষ লাইব্রেরী থেকে কিছু সংখ্যালঘু সহায়তা সহ)।

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

উপভোগ করুন।


আমি মনে করি আপনি ভুলে গেছেন যে অ্যাসেম্বলি ভাষাও একটি ভাষা :)

কিন্তু গুরুত্ব সহকারে, সি প্রোগ্রামগুলি তখনই দ্রুত হয় যখন প্রোগ্রামার জানে সে কী করছে। আপনি সহজেই একটি সি প্রোগ্রাম লিখতে পারেন যা একই কাজ করে এমন অন্যান্য ভাষায় লিখিত প্রোগ্রামগুলির চেয়ে ধীরতর করে।

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

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


এই উত্তরগুলির মধ্যে বেশিরভাগই কেন C হয়, বা তা দ্রুত নয় (সাধারণত সাধারণ বা নির্দিষ্ট পরিস্থিতিতে)। এটা অস্বীকার করা যায় যে:

  • অনেক অন্যান্য ভাষা আমরা স্বীকৃত জন্য স্বয়ংক্রিয় বৈশিষ্ট্য প্রদান করে। বাউন্ড চেক, রান টাইম টাইপ, এবং স্বয়ংক্রিয় মেমরি ম্যানেজমেন্ট, উদাহরণস্বরূপ, বিনামূল্যে আসবেন না। এই বৈশিষ্ট্যগুলির সাথে অন্তত কিছু খরচ যুক্ত রয়েছে, যা আমরা এই বৈশিষ্ট্যগুলি ব্যবহার করে এমন কোড লেখার সময়-বা এমনকি উপলব্ধি করতে পারি না।
  • সোর্স থেকে মেশিনের ধাপ প্রায়শই অন্যান্য ভাষায় সরাসরি হিসাবে নয় এটি সি তে।
  • OTOH, অন্য ভাষায় লিখিত অন্যান্য কোডের তুলনায় সি কোডটি দ্রুত সঞ্চালিত হয় এমন একটি সাধারণীকরণ যা সর্বদা সত্য নয়। কাউন্টার উদাহরণ খুঁজে পাওয়া সহজ (বা contrive)।

যাইহোক, এই সমস্ত কিছু আমি লক্ষ্য করেছি যে, আমি মনে করি, সি বনাম তুলনামূলক পারফরম্যান্সকে প্রভাবিত করে অন্য অনেকগুলি ফ্যাক্টর তুলনায় অনেকগুলি অন্যান্য ভাষা। বুদ্ধিমান:

অন্যান্য ভাষাগুলি প্রায়ই ধীরে ধীরে কোড লেখার পক্ষে আরও সহজ করে তোলে। প্রায়শই, এটি ভাষা নকশা নকশা দ্বারা উত্সাহিত করা হয়। Corollary: একটি সি প্রোগ্রামার অপ্রয়োজনীয় অপারেশন সঞ্চালন না করে কোড লিখতে সম্ভবত।

উদাহরণস্বরূপ, একটি সাধারণ উইন্ডোজ প্রোগ্রাম বিবেচনা করুন যা একটি প্রধান উইন্ডো তৈরি করা হয়। এসি সংস্করণটি WNDCLASS[EX] গঠনটি তৈরি করবে যা WNDCLASS[EX] প্রেরিত হবে, তারপরে CreateWindow[Ex] কল করুন এবং একটি বার্তা লুপ লিখুন। অত্যন্ত সরলীকৃত এবং সংক্ষিপ্ত কোড অনুসরণ করে:

WNDCLASS wc;
MSG      msg;

wc.style         = 0;
wc.lpfnWndProc   = &WndProc;
wc.cbClsExtra    = 0;
wc.cbWndExtra    = 0;
wc.hInstance     = hInstance;
wc.hIcon         = NULL;
wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wc.lpszMenuName  = NULL;
wc.lpszClassName = "MainWndCls";

RegisterClass(&wc);

CreateWindow("MainWndCls", "", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
             CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

while(GetMessage(&msg, NULL, 0, 0)){
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

C # তে সমান প্রোগ্রামটি কোডের একটি লাইন হতে পারে:

Application.Run(new Form());

কোডের এই লাইনটি সমস্ত কার্যকারিতা সরবরাহ করে যা প্রায় ২0 লাইন সি কোডটি করেছে, এবং কিছু জিনিস যা আমরা ছেড়ে দিয়েছি, যেমন ত্রুটি পরীক্ষণ। সমৃদ্ধ, পূর্ণাঙ্গ লাইব্রেরি (সাধারণ সি প্রজেক্টে ব্যবহৃত যারা তুলনায়) আমাদের জন্য অনেক কাজ করেছে, আমাদের সময়কে অনেক ছোট স্নিপেট লেখার জন্য আমাদের সময় মুক্ত করেছে তবে দৃশ্যের পিছনে অনেক পদক্ষেপ রয়েছে।

কিন্তু একটি সমৃদ্ধ লাইব্রেরি সহজ এবং দ্রুত কোড bloat সক্ষম সত্যিই আমার পয়েন্ট নয়। যখন আমাদের ছোট এক-মাছ ধরার নৌকা আসলে বাস্তবায়িত হয় তখন কী ঘটবে তা পরীক্ষা করার সময় আমার পয়েন্ট আরো স্পষ্ট। কিছুক্ষন মজা করার জন্য, ভিজ্যুয়াল স্টুডিও 2008 বা তারপরেও নেট সোর্স অ্যাক্সেস সক্ষম করুন এবং উপরে একটি সহজ লাইনফের মধ্যে পদক্ষেপ নিন। আপনি যে মজার সামান্য রত্নগুলি জুড়ে যাবেন তা হল Control.CreateParams জন্য Control.CreateParams এই মন্তব্যটি:

// In a typical control this is accessed ten times to create and show a control.
// It is a net memory savings, then, to maintain a copy on control.
// 
if (createParams == null) {
    createParams = new CreateParams(); 
} 

দশ বার । একটি WNDCLASSEX কাঠামোর মধ্যে যা সঞ্চয় করা হয়েছে তার সমষ্টি সমানভাবে তথ্য এবং CreateWindowEx যা প্রেরণ করা হয়েছে তা WNDCLASSEX কাঠামোর মধ্যে সংরক্ষিত হওয়ার আগে দশ বার Control ক্লাস থেকে পুনরুদ্ধার করা হয় এবং RegisterClassEx এবং CreateWindowEx

সর্বোপরি, এই খুব মৌলিক কার্য সম্পাদনের জন্য কার্যকর নির্দেশাবলীর সংখ্যা হল সি এর চেয়ে সি # এর পরিমানের আরো 2-3 আদেশ। এটির একটি বৈশিষ্ট্য সমৃদ্ধ লাইব্রেরি ব্যবহারের কারণে এটি যা সাধারণভাবে বিন্যস্ত, বনাম আমাদের সহজ সি কোড যা আমরা ঠিক কি প্রয়োজন এবং কিছুই না। কিন্তু এটির অংশটি এই কারণে যে, .NET ফ্রেমওয়ার্কের মডুলারাইজড, অবজেক্ট-ভিত্তিক প্রকৃতি, কার্যকরী পদ্ধতির দ্বারা প্রায়শই এড়ানো নির্বাহের অনেক পুনরাবৃত্তি করে।

আমি C # বা .NET ফ্রেমওয়ার্ক বাছাই করার চেষ্টা করছি না। আমি বলছি না যে মডুলারাইজেশন, সাধারণকরণ, লাইব্রেরি / ভাষা বৈশিষ্ট্য, ওওপি ইত্যাদি খারাপ জিনিস । আমি C তে আমার বেশিরভাগ বিকাশ সাধন করি, পরে C ++ তে, এবং বেশিরভাগ ক্ষেত্রেই C # তে। একইভাবে, সি এর আগে, আমি বেশিরভাগ সমাবেশ ব্যবহার করতাম। এবং প্রতিটি ধাপে "উচ্চতর" আমার ভাষা যায়, আমি কম সময়ের মধ্যে আরও ভাল, আরো রক্ষণযোগ্য, আরও শক্তিশালী প্রোগ্রাম লিখি। তারা, যদিও, একটু ধীরে ধীরে চালানো ঝোঁক।


এটি আসলে একটি চিরস্থায়ী মিথ্যা মিথ্যা। যদিও এটি সত্য যে সি প্রোগ্রামগুলি প্রায়শই দ্রুত হয় তবে এটি সর্বদা কেস নয়, বিশেষ করে যদি সি প্রোগ্রামার এটিতে খুব ভাল না হয়।

যে কোনও গ্লাইং হোল যা মানুষের ভুলে যায় সেটি হল যখন কোনও GUI প্রোগ্রামে ব্যবহারকারীর ইনপুট যেমন প্রোগ্রামটি আইওওর জন্য কিছুটা ব্লক করতে হয়। এই ক্ষেত্রে, আপনি যে ভাষাটি ব্যবহার করতে পারেন তার চেয়ে আপনি সীমিত সীমাবদ্ধতার কারণে কোন ভাষাটি ব্যবহার করেন তা আসলেই গুরুত্বপূর্ণ নয়। এই ক্ষেত্রে, আপনি যদি C, Java, C # বা এমনকি পার্ল ব্যবহার করেন তবে এটি কোনও ব্যাপার না! আপনি শুধু তথ্য আসতে পারেন চেয়ে দ্রুত যেতে পারে না।

অন্য প্রধান বিষয় হলো, আবর্জনা সংগ্রহ এবং সঠিক পয়েন্টারগুলি ব্যবহার না করে ভার্চুয়াল মেশিনটি অন্যান্য ভাষার মধ্যে উপলব্ধ অপ্টিমাইজেশানগুলি তৈরি করতে দেয়। উদাহরণস্বরূপ, JVM হিপে বস্তুগুলি ডিফ্র্যাগমেন্ট করার জন্য বস্তুগুলি সরাতে সক্ষম। ভবিষ্যতে বরাদ্দগুলি আরও দ্রুত করে তোলে কারণ পরের সূচীটি কেবল একটি টেবিলের মধ্যে এটি দেখতে চেয়ে ব্যবহার করা যেতে পারে। আধুনিক JVMs এছাড়াও প্রকৃতপক্ষে মেমরি deallocate করতে হবে না; পরিবর্তে, তারা যখন জিসি এবং মৃত বস্তুর ব্যয়বহুল মেমরিগুলি মূলত মুক্তভাবে পুনরুদ্ধার করা হয় তখন তারা কেবল লাইভ বস্তুগুলি সরানো হয়।

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


মূল কারণ হল এটি একটি স্থিরভাবে টাইপ করা ভাষা এবং এটি মেশিন কোডে সংকলিত। এছাড়াও, যেহেতু এটি একটি নিম্ন স্তরের ভাষা, তাই এটি এমন কিছু করে না যা আপনি এটি বলবেন না।

এই কিছু আসে যে অন্যান্য বিষয়।

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

বেশিরভাগ স্ট্যাটিক-টাইপ করা ভাষাগুলিকে সি থেকে দ্রুত বা দ্রুত সংকলিত করা যেতে পারে, বিশেষ করে যদি তারা ধারণা করতে পারে যে C পয়েন্টার আলাইজিংয়ের কারণে C না পারে।


যদি আপনি 0.05 সেকেন্ডের মধ্যে রান করে এমন কিছু তৈরি করতে এক মাস ব্যয় করেন এবং আমি জাভাতে একই জিনিস লেখার জন্য একটি দিন কাটিয়েছি এবং এটি 0.10 সেকেন্ডে চলে তবে কি C সত্যিই দ্রুত?

কিন্তু আপনার প্রশ্নের উত্তর দেওয়ার জন্য, ভালভাবে লিখিত সি কোড সাধারণত অন্যান্য ভাষায় ভাল লিখিত কোডের চেয়ে দ্রুত চলবে কারণ সি কোড "ভাল" লেখার অংশটি কাছাকাছি মেশিন পর্যায়ে ম্যানুয়াল অপটিমাইজেশানগুলি অন্তর্ভুক্ত করে।

যদিও কম্পাইলারগুলি সত্যিই খুব চতুর, তবে তারা সৃজনশীলভাবে এমন কোড সহ আসে না যা হ্যান্ডসাসেড অ্যালগরিদমগুলির সাথে প্রতিদ্বন্দ্বিতা করে ("হাত" একটি ভাল সি প্রোগ্রামারের অন্তর্গত)।

সম্পাদনা:

অনেকগুলি মন্তব্য "সি-তে লিখি" এবং আমি অপটিমাইজেশনের বিষয়ে ভাবি না।

কিন্তু এই পোস্ট থেকে একটি নির্দিষ্ট উদাহরণ নিতে:

ডেলফিতে আমি এই লিখতে পারি:

function RemoveAllAFromB(a, b: string): string;
var
  before, after :string;
begin
  Result := b;
  if 0 < Pos(a,b) then begin
    before := Copy(b,1,Pos(a,b)-Length(a));
    after := Copy(b,Pos(a,b)+Length(a),Length(b));
    Result := before + after;
    Result := RemoveAllAFromB(a,Result);  //recursive
  end;
end;

এবং সিআই এ লিখুন:

char *s1, *s2, *result; /* original strings and the result string */
int len1, len2; /* lengths of the strings */
for (i = 0; i < len1; i++) {
   for (j = 0; j < len2; j++) {
     if (s1[i] == s2[j]) {
       break;
     }
   }
   if (j == len2) {  /* s1[i] is not found in s2 */
     *result = s1[i]; 
     result++; /* assuming your result array is long enough */
   }
}

কিন্তু সি সংস্করণে কতটি অপটিমাইজেশন আছে? আমরা বাস্তবায়ন সম্পর্কে অনেক সিদ্ধান্ত নিয়েছি যা আমি ডেল্ফি সংস্করণে ভাবি না। কিভাবে একটি স্ট্রিং বাস্তবায়িত হয়? ডেলফিতে আমি এটা দেখতে পাচ্ছি না। সি-তে, আমি এটি ASCII পূর্ণসংখ্যার একটি অ্যারে একটি পয়েন্টার হতে হবে সিদ্ধান্ত নিয়েছে, যা আমরা অক্ষর কল। সি, আমরা এক সময়ে চরিত্র অস্তিত্ব জন্য পরীক্ষা। ডেলফিতে, আমি পিস ব্যবহার করি।

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


সি সবসময় দ্রুত নয়।

উদাহরণস্বরূপ, মডার্ন ফোর্ট্রান উদাহরণস্বরূপ সি ধীর।

সি কিছু জিনিস জন্য জাভা চেয়ে প্রায়ই ধীর। (বিশেষ করে জিট কম্পাইলার আপনার কোড এ যেতে হয়েছে পরে)

সি পয়েন্টার aliasing ঘটতে দেয়, যার মানে কিছু ভাল অপটিমাইজেশন সম্ভব নয়। বিশেষত যখন আপনার একাধিক এক্সিকিউশন ইউনিট থাকে, এটি ডেটা আনতে স্টলের কারণ করে। আউ।

পয়েন্টার গাণিতিক কাজগুলি প্রকৃতপক্ষে কিছু CPU পরিবারগুলিতে (ধীরে ধীরে বিশেষ করে!) ধীরে ধীরে ধীরে ধীরে সঞ্চালনকে কার্যকরী করে তোলে বলে ধারনা করা হয়েছে। এটি segmented x86 এ বড় একটিকে স্তন্যপান করতে ব্যবহৃত হয়েছিল।

মূলত, যখন আপনি একটি ভেক্টর ইউনিট, বা একটি সমান্তরাল কম্পাইলার পেতে, সি stinks এবং আধুনিক ফোর্টান দ্রুত সঞ্চালিত হয়।

সি প্রোগ্রামার ট্রিকস ঠাণ্ডা (ফ্লাই এ এক্সিকিউটেবল পরিবর্তন) মত সিপিইউ প্রিফেক্ট স্টল।

আপনি ড্রিফট পেতে?

এবং আমাদের ভাল বন্ধু, x86, একটি নির্দেশ সেট চালায় যে এই দিন প্রকৃত CPU আর্কিটেকচারের সাথে সামান্য সম্পর্ক বজায় রাখে। শ্যাডো নিবন্ধন, লোড স্টোর অপ্টিমাইজার, সব CPU এ। সুতরাং সি ভার্চুয়াল ধাতু কাছাকাছি তারপর। আসল ধাতু, ইন্টেল আপনাকে দেখতে দেয় না। (ঐতিহাসিকভাবে ভিআইএলডাব্লিউ সিপিওর একটি বস্ট ছিল তাই সম্ভবত এটি কোনও খারাপ নয়।)

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

এবং অবশেষে, কিছু CPUs (www.ajile.com) হার্ডওয়্যারে জাভা বাইটকোড চালায়। সি একটি পিটিএ যে CPU এ ব্যবহার করতে হবে।


সেখানে অনেক প্রশ্ন আছে - বেশিরভাগই আমি উত্তর দেওয়ার যোগ্য নই। কিন্তু এই শেষের জন্য:

অন্যান্য ভাষাগুলিকে কি বাইনারি থেকে কম্পাইল করতে সক্ষম হওয়া থেকে বিরত রাখতে যা সি হিসাবে দ্রুত প্রতিটি বিট চালায়?

একটি শব্দ, বিমূর্তন।

সি মেশিন অবজেক্ট থেকে বিমূর্ততা মাত্র এক বা 2 স্তর। জাভা এবং নেট ভাষার অ্যাডমিনিস্ট্রেটর থেকে কমপক্ষে 3 স্তর বিমূর্ততা রয়েছে। আমি পাইথন এবং রুবি সম্পর্কে নিশ্চিত নই।

সাধারণত, আরো প্রোগ্রামার খেলনা (জটিল তথ্য প্রকার ইত্যাদি), আপনি আরও মেশিন মেশিন থেকে এবং আরও অনুবাদ সম্পন্ন করতে হবে।

আমি এখানে এবং সেখানে বন্ধ কিন্তু যে মূল উপাদান।

আপডেট ------- আরো বিস্তারিত সহ এই পোস্টে কিছু ভাল মন্তব্য আছে।


সি সম্পর্কে বিশেষ কিছুই নেই সি এর কারণ এটি দ্রুত।

নতুন ভাষা যা আবর্জনা সংগ্রহ , গতিশীল টাইপিং এবং অন্যান্য সুবিধাগুলির জন্য সমর্থন করে যা প্রোগ্রামারদের প্রোগ্রামগুলি লিখতে সহজ করে তোলে।

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

যেহেতু জাভা (তার জাভা ভার্চুয়াল মেশিন সহ ) এবং নেট (তার প্রচলিত ভাষা রানটাইম সহ) অনেকগুলি ভাষা এবং প্ল্যাটফর্মগুলি কয়েক বছরের মধ্যে কার্য সম্পাদন করেছে, যেমন সাময়িকভাবে সংকলনের মতো আগামিকাল কম্পাইলেশন যা দেশীয় মেশিন কোড তৈরি করে উচ্চ কর্মক্ষমতা অর্জন bytecode।


আমি জানি অনেক লোক এটিকে দীর্ঘ বাতাসে বলেছে, কিন্তু:

সি দ্রুত কারণ এটি কম (আপনার জন্য)।


কিছু সি ++ অ্যালগরিদম সি থেকে দ্রুত এবং অন্যান্য ভাষাগুলিতে আলগোরিদিম বা নকশা নিদর্শনগুলির কিছু বাস্তবায়ন সি থেকে দ্রুত হতে পারে।

যখন লোকেরা বলে যে সি দ্রুত, এবং তারপরে অন্য কোন ভাষা সম্পর্কে কথা বলা যায়, তখন তারা সাধারণভাবে সিটির কার্যকারিতা ব্যাঞ্চমার্ক হিসাবে ব্যবহার করে।


ফিরে ভাল ole দিন, মাত্র দুটি ধরনের ভাষা ছিল: সংকলিত এবং ব্যাখ্যা।

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

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

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

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

পল।


হট-স্পট অপ্টিমাইজেশান , প্রাক-সংকলিত মেটা-অ্যালগরিদম এবং parallelism বিভিন্ন রূপগুলির মতো অগ্রণী অপ্টিমাইজেশান কৌশলগুলিকে সেট করা , একটি ভাষা মৌলিক গতির এমন ক্রিয়াকলাপগুলি সমর্থন করার জন্য প্রয়োজনীয় অন্তর্দৃষ্টিগুলির পিছনে দৃঢ়ভাবে সম্পর্কযুক্ত জটিলতার সাথে জোরালো সম্পর্কযুক্ত ভিতরের loops মধ্যে নির্দিষ্ট করা হবে ।

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

সি (এবং একইরকম ঘনিষ্ঠভাবে সম্পর্কিত C ++) এর আরো মৌলিক সুবিধা স্ট্যাক-ভিত্তিক মেমরি বরাদ্দের উপর একটি বৃহত নির্ভরতা যা বরাদ্দ, বরাদ্দকরণ এবং অ্যাক্সেসের জন্য স্বতঃস্ফূর্তভাবে দ্রুত । সি (এবং সি ++) প্রাথমিক কল স্ট্যাক প্রিম্টিভ, অ্যারে এবং সমষ্টি ( struct/ class) এর বরাদ্দকরণের জন্য ব্যবহার করা যেতে পারে ।

সিটি গতিশীলভাবে মাপের আকার এবং জীবনকাল (তথাকথিত 'হিপ' ব্যবহার করে) এর মেমরি বরাদ্দ করার ক্ষমতা প্রদান করে , তবে এটি ডিফল্টভাবে এড়িয়ে যায় (পরিবর্তে স্ট্যাকটি ব্যবহৃত হয়)।

Tantalizingly, কখনও কখনও অন্যান্য প্রোগ্রামিং ভাষা রানটাইম পরিবেশের মধ্যে সি মেমরি বরাদ্দ কৌশল প্রতিলিপি সম্ভব। এটি asm.js দ্বারা প্রদর্শিত হয়েছে , যা C বা C ++ এ লিখিত asm.js JavaScript এর উপসেটে অনুবাদ করতে এবং ওয়েব ব্রাউজার পরিবেশে নিরাপদে চালানোর অনুমতি দেয় - কাছাকাছি-স্থানীয় গতির সাথে।

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


আধুনিক অপ্টিমাইজেশান কম্পাইলারগুলির সাথে, এটি অত্যন্ত অসম্ভাব্য যে একটি বিশুদ্ধ সি প্রোগ্রাম কম্পাইল হওয়া সমস্ত চেয়ে দ্রুততর হবে। নেট কোড, যদি থাকে তবে। সঙ্গে উত্পাদনশীলতা বৃদ্ধি যে .net মত অবকাঠামো ডেভেলপার প্রদান, আপনি একটি দিন একটি ডেভেলপার বেতন তুলনায় হার্ডওয়্যার সস্তা খরচ সঙ্গে মিলিত নিয়মিত সি সপ্তাহ বা কয়েক মাস নিতে ব্যবহৃত জিনিস করতে পারেন, এটি শুধু উপায় সস্তা লিখতে একটি উচ্চ স্তরের ভাষা উপাদান এবং কোনো slowness হার্ডওয়্যার নিক্ষেপ।

কারণ জেফ এবং জোয়েল সি "বাস্তব প্রোগ্রামার" ভাষা হিসাবে কথা বলছেন কারণ সি-তে কোনও হাতের হোল্ডিং নেই। আপনাকে অবশ্যই নিজের মেমরি বরাদ্দ করতে হবে, মেমরিটি বরখাস্ত করতে হবে, আপনার নিজস্ব সীমানা পরীক্ষা করতে হবে ইত্যাদি। এমন কোন জিনিস নেই নতুন বস্তুর (); কোন আবর্জনা সংগ্রহ, ক্লাস, OOP, সত্তা কাঠামো, LINQ, বৈশিষ্ট্য, গুণাবলী, ক্ষেত্র, বা যে মত কিছু আছে। আপনি পয়েন্টার গাণিতিক এবং কিভাবে একটি পয়েন্টার dereference মত জিনিস জানতে হবে। এবং, যে বিষয়ে, একটি পয়েন্টার কি জানেন এবং বুঝতে। আপনি স্ট্যাক ফ্রেম কি এবং কি নির্দেশ পয়েন্টার জানতে হবে। আপনি সিপিইউ আর্কিটেকচারের মেমরি মডেলটি জানেন যা আপনি কাজ করছেন। একটা মাইক্রোপ্রসেসার স্থাপত্য অন্তর্নিহিত বুঝতে অনেকটা (সাধারণত হয়মাইক্রোকম্পিউটার যা আপনি কাজ করছেন) যখন C তে প্রোগ্রামিং করা হয় যা সহজেই উপস্থিত হয় না বা সি # বা জাভা মত কিছু প্রোগ্রামিং করার সময় প্রয়োজনীয় হয়। যে সমস্ত তথ্য কম্পাইলার (বা ভিএম) প্রোগ্রামার বন্ধ-লোড করা হয়েছে।


আমি কিছু ভাষা দ্রুত এবং কয়েকটি ধীরে ধীরে কেন লিঙ্কে একটি উত্তর খুঁজে পেয়েছি, আমি আশা করি এটি কেন সি বা সি ++ অন্যদের তুলনায় দ্রুততর হবে সে বিষয়ে আরো পরিষ্কার করবে, কিছু অন্যান্য ভাষাও যা সি থেকে দ্রুত, কিন্তু আমরা পারব না তাদের সব ব্যবহার করুন। কিছু ব্যাখ্যা -

ফররানের গুরুত্বপূর্ণ কারণগুলির মধ্যে একটি বড় কারণ হল এটি দ্রুত কারণ এটি দ্রুত: ফোর্ট্রানে লিখিত নম্বর ক্রঞ্চিং রুটিনগুলি অন্যান্য অন্যান্য ভাষায় লিখিত সমমানের রুটিনগুলির চেয়ে দ্রুততর হতে থাকে। এই স্পেস-সি এবং সি ++ -তে ফোর্টারের সাথে প্রতিযোগিতামূলক ভাষাগুলি ব্যবহার করা হয় কারণ এটি এই কর্মক্ষমতার সাথে প্রতিযোগিতামূলক।

এই প্রশ্ন উত্থাপিত: কেন? C ++ এবং ফোর্ট্রান যা তাদের দ্রুত করে তোলে এবং এটি জাভা বা পাইথন হিসাবে অন্যান্য জনপ্রিয় ভাষাগুলিকে কেন অতিক্রম করে?

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

বিভাজন কঠিন নয়; বরং, একটি বর্ণালী আছে। একদিকে, আমাদের ঐতিহ্যগত সংকলিত ভাষা রয়েছে, একটি গ্রুপ যা ফোর্ট্রান, সি এবং সি ++ অন্তর্ভুক্ত করে। এই ভাষায়, একটি বিচ্ছিন্ন সংকলন স্তর রয়েছে যা একটি প্রোগ্রামের উত্স কোডকে এক্সিকিউটেবল আকারে অনুবাদ করে যা প্রসেসর ব্যবহার করতে পারে।

এই সংকলন প্রক্রিয়া বিভিন্ন পদক্ষেপ আছে। উৎস কোড বিশ্লেষণ এবং বিশ্লেষণ করা হয়। টাইপস এবং বানান ত্রুটি যেমন বেসিক কোডিং ভুল এই সময়ে সনাক্ত করা যেতে পারে। পার্সেড কোডটি একটি মেমরি উপস্থাপনা তৈরি করতে ব্যবহৃত হয়, যাও ভুলের সনাক্ত করার জন্য ব্যবহার করা যেতে পারে- এই সময়, সেমিকান্টিক ভুলগুলি, যেমন বিদ্যমান নেই এমন কলিং ফাংশন, বা পাঠ্যের স্ট্রিংগুলিতে গাণিতিক ক্রিয়াকলাপগুলি সঞ্চালনের চেষ্টা করছে।

এই মেমরি উপস্থাপনাটি তখন কোড জেনারেটর চালানোর জন্য ব্যবহৃত হয়, যেটি এক্সিকিউটেবল কোড তৈরি করে। জেনারেট কোডের কর্মক্ষমতা উন্নত করার জন্য কোড অপ্টিমাইজেশানটি এই প্রক্রিয়ার মধ্যে বিভিন্ন সময়ে সঞ্চালিত হয়: কোড উপস্থাপনাতে উচ্চ-স্তরের অপ্টিমাইজেশানগুলি সম্পাদিত হতে পারে এবং কোড জেনারেটরের আউটপুটে নিম্ন স্তরের অপ্টিমাইজেশান ব্যবহার করা হয়।

প্রকৃতপক্ষে কোড এক্সিকিউটিভ পরে ঘটবে। সম্পূর্ণ সংকলন প্রক্রিয়াটি নির্বাহ করা যেতে পারে এমন কিছু তৈরি করার জন্য ব্যবহার করা হয়।

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

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

ইন্টারপ্রেটার স্টাইলের সবচেয়ে চরম উদাহরণটি একটি ব্যাচ ফাইল বা শেল স্ক্রিপ্টের মত। এই ভাষায়, এক্সিকিউটেবল কোডটি প্রায়ই ইন্টারপ্রেটারেও তৈরি হয় না, বরং পৃথক, একক প্রোগ্রাম।

সুতরাং কেন এই কর্মক্ষমতা একটি পার্থক্য না? সাধারণভাবে, পরিমাপ প্রতিটি স্তর কর্মক্ষমতা হ্রাস করা হয়। উদাহরণস্বরূপ, দুই সংখ্যার যোগ করার দ্রুততম উপায় হল সেই সংখ্যাগুলির উভয় প্রসেসরের নিবন্ধকগুলিতে এবং প্রসেসরের যোগ নির্দেশনাটি ব্যবহার করা। যে কম্পাইল প্রোগ্রাম কি করতে পারেন; তারা নিবন্ধকদের মধ্যে ভেরিয়েবল স্থাপন এবং প্রসেসর নির্দেশাবলী সুবিধা নিতে পারেন। কিন্তু ব্যাখ্যাযুক্ত প্রোগ্রামগুলিতে, সেই একই সংযোজনটির জন্য ভেরিয়েবলগুলির একটি টেবিলে দুটি অনুসন্ধানের প্রয়োজন হতে পারে যাতে মানগুলি আনতে পারে, তারপরে একটি ফাংশনকে সংযোজন করার জন্য কল করা হয়। সংকলিত প্রোগ্রামটি প্রকৃত সংযোজন সঞ্চালনের জন্য যে কার্যটি একই প্রসেসর নির্দেশ ব্যবহার করতে পারে সেটি খুব ভালভাবে ব্যবহার করতে পারে, তবে নির্দেশের আগে সমস্ত অতিরিক্ত কাজ আসলেই ব্যবহার করা যেতে পারে যা জিনিসগুলিকে ধীর করে তোলে।

আপনি আরো জানতে চান তাহলে Source চেক করুনSource


এটি ভাষা এবং সরঞ্জামগুলির মতো ভাষা সম্পর্কে অনেক বেশি নয়। সি এর জন্য উপলব্ধ লাইব্রেরি এবং কম্পাইলারগুলি নতুন ভাষার চেয়ে পুরানো। আপনি হয়তো মনে করেন এটি তাদের ধীর করে তুলবে, কিন্তু AU কনট্রায়ার।

এই লাইব্রেরিগুলি এমন সময় লেখা হয়েছিল যখন প্রক্রিয়াকরণ শক্তি এবং মেমরি প্রিমিয়ামে ছিল। এ সব কাজ করার জন্য তাদের খুব দক্ষতার সাথে লেখা উচিত ছিল । সি কম্পাইলারের বিকাশকারীরা বিভিন্ন প্রসেসরগুলির জন্য চটপট অপটিমাইজেশনের সকল প্রকারের কাজগুলিতে দীর্ঘ সময় লেগেছে। C এর মেয়াদপূর্তি এবং বিস্তৃত গ্রহণ একই বয়সের অন্যান্য ভাষার উপর স্বাক্ষরকারী সুবিধা লাভ করে। এটি C কে আরও বেশি পরিমাণে কাঁচা কর্মক্ষমতাতে জোর দেয় না এমন নতুন সরঞ্জামগুলির উপর গতিবিধির সুবিধা দেয়।


দ্রুততম চলমান কোড সাবধানে হাত পরিকল্পিত মেশিন কোড হবে। Assembler প্রায় হিসাবে ভাল হবে। উভয় খুব নিম্ন স্তরের এবং এটি জিনিস করার জন্য অনেক লেখা কোড লাগে। সি এসেম্বলার উপরে একটু। আপনি এখনও প্রকৃত মেশিনে খুব নিম্ন স্তরে নিয়ন্ত্রণ করার ক্ষমতা আছে, তবে যথেষ্ট বিমূর্ততা এটিকে দ্রুত এবং সহজে এম্বেডার লেখার জন্য তৈরি করতে সক্ষম। অন্যান্য ভাষা যেমন সি # এবং জাভা আরও বেশি বিমূর্ত। অ্যাসেম্বলার এবং মেশিন কোডকে নিম্ন স্তরের ভাষা বলা হয়, সি # এবং জাভা (এবং আরও অনেকগুলি) উচ্চ স্তরের ভাষা বলে। সি কখনও কখনও মাঝারি স্তরের ভাষা বলা হয়।


পুরনো "সি / সি ++ দেখতে জাভাস্ক্রিপ্টের চেয়ে জাভাস্ক্রিপ্ট হওয়া উচিত কারণ জাভা ব্যাখ্যা করা হয়েছে" পুরাণ এখনও জীবিত এবং লাথি মারছে। আছে কয়েক বছর ফিরে যাচ্ছে নিবন্ধ , সেইসাথে আরো সাম্প্রতিক বেশী , যে ধারণা বা পরিমাপ সঙ্গে ব্যাখ্যা কেন এই কেবল সময় তা হয় না

বর্তমান ভার্চুয়াল মেশিন বাস্তবায়নগুলি (এবং কেবলমাত্র জেভিএম নয়) প্রোগ্রাম নির্বাহনের সময় সংগৃহীত তথ্যগুলির সদ্ব্যবহার করতে পারে বিভিন্ন ধরণের কৌশল ব্যবহার করে ক্রমান্বয়ে কোডটি চালানোর জন্য:

  • মেশিন কোড ঘন ঘন পদ্ধতি রেন্ডারিং,
  • ছোট পদ্ধতি inlining,
  • লকিং সমন্বয়

এবং কোডটি আসলে কি করছে তা জানার ভিত্তিতে এবং পরিবেশের প্রকৃত বৈশিষ্ট্যগুলিতে যা চলছে তা বজায় রাখার ভিত্তিতে অন্যান্য সমন্বয়গুলির বিভিন্ন





performance