সিডিসিএল আর্গুমেন্টগুলিকে বিপরীত ক্রমে স্ট্যাকের দিকে ঠেলে দেওয়া হয়, কলার স্ট্যাকটি সাফ করে দেয় এবং প্রসেসরের রেজিস্ট্রি দিয়ে ফলাফলটি ফিরে আসে (পরে আমি এটি "রেজিস্টার এ" বলব)। এসটিডিসিএলে একটি পার্থক্য রয়েছে, কলার স্ট্যাক সাফ করে না, কল করে do
আপনি জিজ্ঞাসা করছেন কোনটি দ্রুত? কেউ না. আপনার যতক্ষণ সম্ভব নেটিভ কলিং কনভেনশন ব্যবহার করা উচিত। বাহ্যিক গ্রন্থাগারগুলি ব্যবহার করার জন্য যখন নির্দিষ্ট কোনও কনভেনশন প্রয়োজন তখন কেবল কোনও উপায় না থাকলে কনভেনশন পরিবর্তন করুন।
এছাড়াও, অন্যান্য কনভেনশন রয়েছে যে সংকলকটি ডিফল্ট হিসাবে বেছে নিতে পারে অর্থাৎ ভিজ্যুয়াল সি ++ সংকলক FASTCALL ব্যবহার করে যা প্রসেসরের রেজিস্টারগুলির আরও ব্যাপক ব্যবহারের কারণে তাত্ত্বিকভাবে দ্রুত faster
সাধারণত আপনাকে অবশ্যই কোনও বাহ্যিক গ্রন্থাগারে পাস হওয়া কলব্যাক ফাংশনগুলিতে একটি যথাযথ কলিং কনভেনশন স্বাক্ষর দিতে হবে অর্থাৎ qsort
সি লাইব্রেরি থেকে কলব্যাক অবশ্যই সিডিইসিএল হতে হবে (যদি পূর্বনির্ধারিত সংকলকটি অন্য কনভেনশন ব্যবহার করে তবে আমাদের অবশ্যই কলব্যাকটি সিডিসিএল হিসাবে চিহ্নিত করতে হবে) বা বিভিন্ন উইনাপি কলব্যাক অবশ্যই হতে হবে এসটিডিসিএল (পুরো উইনপিআইটি এসটিডিসিএল)।
অন্যান্য সাধারণ ক্ষেত্রে হতে পারে যখন আপনি কিছু বাহ্যিক কার্যের জন্য পয়েন্টারগুলি সঞ্চয় করছেন অর্থাৎ উইনএপিআই ফাংশনে একটি পয়েন্টার তৈরি করতে তার প্রকারের সংজ্ঞাটি এসটিডিসিএল দিয়ে চিহ্নিত করতে হবে।
এবং নীচে একটি সংকলক কীভাবে তা দেখায় তার একটি উদাহরণ রয়েছে:
i = Function(x, y, z);
int Function(int a, int b, int c) { return a + b + c; }
সিডিসিএল:
push on the stack a copy of 'z', then a copy of 'y', then a copy of 'x'
call (jump to function body, after function is finished it will jump back here, the address where to jump back is in registers)
move contents of register A to 'i' variable
pop all from the stack that we have pushed (copy of x, y and z)
copy 'a' (from stack) to register A
copy 'b' (from stack) to register B
add A and B, store result in A
copy 'c' (from stack) to register B
add A and B, store result in A
jump back to caller code (a, b and c still on the stack, the result is in register A)
এসটিডিসিএল:
push on the stack a copy of 'z', then a copy of 'y', then a copy of 'x'
call
move contents of register A to 'i' variable
pop 'a' from stack to register A
pop 'b' from stack to register B
add A and B, store result in A
pop 'c' from stack to register B
add A and B, store result in A
jump back to caller code (a, b and c are no more on the stack, result in register A)