Payamvdn/NorthPersian_fa_wiki huggingface dataset:
مدل کانتور فعال، که مدل مارها نیز نامیده می شود، یک چارچوب در بینایی رایانه ای است که توسط مایکل کاس، اندرو ویتکین و دمتری ترزوپولوس معرفی شده، و برای ترسیم خطوط خارجی یک شیء، از یک تصویر دو بعدی احتمالاً پر نویز تعریف شده است. مدل مارها در دیدگاه رایانه ای محبوب است و این مدل به طور گسترده در برنامه های کاربردی مانند ردیابی شی، تشخیص شکل، تقسیم بندی، آشکارسازی لبه و تطبیق استریو مورد استفاده قرار می گیرد. مدل مار یک انرژی کمینه کننده و اسپلاین قابل اصلاح است که تحت تأثیر محدودیت ها و نیروهای تصویر است که آن را به سمت کانتورها و نیروهای داخلی متصل می کند که مقاومت در برابر تغییر شکل را دارند. مدل مارها ممکن است به عنوان یک مورد خاص از روش کلی تطبیق یک مدل ناپایدار به یک تصویر با استفاده از به حداقل رساندن انرژی درک شوند. در دو بعد، ، یک نسخه گسسته این رویکرد را نشان می دهد، با استفاده از برای محدود کردن محدوده شکل به یک دامنه صریح از یک مجموعه آموزشی یاد می شود. مارها کل مشکل پیدا کردن خطوط در تصاویر را حل نمی کنند، زیرا این روش نیاز به دانش قبلی شکل کانتورهای طرحی شده دارد. در عوض، آنها به مکانیزم های دیگر م
انند تعامل با یک کاربر، تعامل با برخی از فرایندهای درک تصویری سطح بالاتر یا اطلاعاتی از داده های تصویر مجاور در زمان یا فضا بستگی دارد. انگیزه و هدف. در دیدگاه رایانه، مدلهای کانتور، مرزهای شکل در یک تصویر را توصیف می کنند. مدل مارها به طور خاص طراحی شده اند تا مشکلات را حل کنند که در آن شکل تقریبی مرز شناخته شده است. با داشتن یک مدل تغییر شکل پذیر، مارها می توانند به تفاوت و نویز در تطبیق استریو و ردیابی حرکت سازگار شوند. علاوه بر این، این روش می تواند در تصویر را با نادیده گرفتن اطلاعات مرزی گم شده پیدا کند. در مقایسه با تکنیک های استخراج ویژگی کلاسیک، مدل مارها مزایای متعددی دارند: اشکالات کلیدی روش سنتی مارهای عبارتند از: فرمول انرژی. یک مار قابل ارتجاع ساده با مجموعه ای از formula_1 نقطه formula_2 تعریف می شود که formula_3، ترم انرژی درونی انعطاف پذیر formula_4، و انرژی بر اساس لبه خارجی formula_5نامیده می شود. هدف از اصطلاح انرژی درونی، کنترل تغییرات ساخته شده در مار است و هدف از اصطلاح انرژی خارجی، کنترل اتصالات کانتور بر روی تصویر است. انرژی خارجی معمولاً ترکیبی از نیروهای مربوط به formula_6خود تصویر
و نیروهایformula_7 محدود کننده معرفی شده توسط کاربر است. عملکرد انرژی مارها مجموع انرژی خارجی و انرژی داخلی آن است یا به عبارتی: انرژی درونی. انرژی داخلی مار از تداوم کانتور تشکیل شده است formula_9 و صافی کانتور formula_10. می توان به صورت زیر گسترش داد: که formula_13 و formula_14 وزن تعریف شده توسط کاربر هستند که حساسیت عملکرد انرژی داخلی به مقدار کشش در مار و مقدار انحنای مار را محاسبه می کند و به این ترتیب تعداد محدودیت های شکل مار را کنترل می کند. در عمل، وزن بزرگ formula_13 برای مدت زمان تداوم تغییرات در فاصله بین نقاط در کانتور را جبران می کند. وزن بزرگ formula_14 برای مدت زمان نرم شدگی، نوسانات در کانتور را جبران می کند و خطوط را به عنوان یک صفحه نازک عمل می کند. انرژی تصویر. انرژی در تصویر برخی از ویژگی های تصویر است. این یکی از رایج ترین اصلاحات در روش های مشتق شده است. ویژگی ها در تصاویر و تصاویر خود را می توان در بسیاری از روش های مختلف پردازش شده است. برای یک تصویر formula_17، خطوط، لبه ها و انتهای موجود در تصویر، فرمول بندی کلی انرژی به دلیل تصویر است: جایی که، formula_19, formula_20, formula_21
وزن این ویژگی های برجسته هستند. وزن های بالاتر نشان می دهد که ویژگی برجسته سهم بیشتری نسبت به نیروی تصویر داشته است. خط عملکردی. تابع خط است که شدت تصویر است که می تواند به عنوان نشان داده شود نشانه ای از formula_19 تعیین خواهد کرد که آیا خط به خطوط تاریک یا خطوط نور جذب خواهد شد. برخی از کاهش صوت یا نویز ممکن است بر روی تصویر استفاده شود، و سپس عملکرد تابع خط به نظر می رسد لبه کاربردی. لبه عملکردی بر اساس شیب تصویر است. یک اجرای این است یک مار که دور از کانتور مورد نظر قرار دارد ممکن است به اشتباه به حداقل محلی نزدیک شود. به منظور اجتناب از این کمینه های محلی، می توان از ادامه فضای مقیاس استفاده کرد. این با استفاده از یک فیلتر تاری در تصویر به دست می آید و به میزان محاسبه می شود که محاسبات پیشرفت می کند تا تناسب مار را اصلاح کند. عملکرد انرژی با استفاده از مقیاس فضا ادامه دارد جایی که formula_27 گاوسی با انحراف معیار formula_28 است. حداقل این تابع در قرار دارد formula_29 که لبه ها را بر اساس تعریف می کنند. خاتمه عملیات. انحنای سطوح سطح در یک تصویر تقریباً صاف می تواند برای تشخیص گوشه ها و انتهای یک تصویر است
فاده شود. با استفاده از این روش، formula_30 تصویری که توسط با زاویه شیب بردارهای واحد در امتداد جهت گرادیان و بردارهای واحد عمود بر جهت گرادیان عملکرد خاتمه انرژی به صورت زیر نشان داده می شود: انرژی محدود. بعضی از سیستم ها، از جمله پیاده سازی مارها اصلی، برای تعامل کاربر برای هدایت مارها، نه تنها در موقعیت اولیه، بلکه در شرایط انرژی آنها، امکان پذیر است. چنین محدودیتی انرژی formula_36 می تواند به طور تعاملی هدایت مار به سمت یا دور از ویژگی های خاص مورد استفاده قرار گیرد. بهینه سازی از طریق رسیدن به گرادیان. با توجه به یک حدس اولیه برای یک مار، عملکرد انرژی مار به طور تکراری کمینه می شود. به حداقل رساندن گرادیان کاهشی یکی از ساده ترین بهینه سازی ها می باشد که می تواند برای به حداقل رساندن انرژی مار استفاده شود. هر تکرار یک گام در شیب منفی نقطه با اندازه گام کنترل شده است formula_37 برای پیدا کردن مینیمم های محلی این به حداقل رساندن شیب نزولی می تواند به عنوان مثال پیاده سازی شود جایی که formula_39 نیروی مار است که توسط منفی گرادیان میدان انرژی تعریف می شود. با فرض وزن formula_41 و formula_42 ثابت با توجه به fo
rmula_43، این روش تکرار می تواند به ساده تر شدن باشد تقریب گسسته. در عمل، تصاویر دارای وضوح محدود هستند و تنها می توانند بر روی گام های زمانی محدود formula_45قرار گیرند. به این ترتیب تقریبهای گسسته باید برای اجرای عملی مارها ساخته شود. عملکرد انرژی مارها می تواند با استفاده از نقاط گسسته مارها تقریباً محاسبه شود. به همین ترتیب، نیروهای مار را می توان تقریبی به عنوان تقریب گرادیان را می توان با استفاده از هر روش تقریبی محدود با توجه به "s", مانند اختلاف محدود. بی ثباتی عددی به دلیل زمان گسسته. معرفی زمان گسسته به الگوریتم می تواند به روز رسانی هایی ارائه کند که مارها از حداقل ها جذب شده است؛ این بیشتر می تواند منجر به نوسانات در اطراف حداقل شود یا منجر به کمینه های مختلف یافت شود. این را می توان از طریق تنظیم گام زمانی که اندازه گام هرگز بیشتر از یک پیکسل به علت نیروهای تصویر است، اجتناب کنید. با این حال، در مناطق کم انرژی، انرژی های داخلی بر روی به روز رسانی تسلط دارند. به طور متناوب، نیروهای تصویر می توانند برای هر مرحله عادی شوند به طوری که تصویر فقط مارها را به صورت یک پیکسل به روز می کند. این را می توان ب
ه عنوان فرموله کرد: جایی که formula_49 نزدیک به مقدار اندازه پیکسل است. این مسئله از غلبه بر انرژی های داخلی که از تنظیم گام زمان جلوگیری می کند. بی ثباتی عددی به دلیل فضای گسسته. انرژی در یک تصویر مداوم ممکن است عبور صفر داشته باشد که به عنوان یک پیکسل در تصویر وجود ندارد. در این مورد، یک نقطه در مار بین دو پیکسل که همسایه آن عبور صفر است، نوسان می کند. این نوسان را می توان با استفاده از درون یابی بین پیکسل به جای نزدیکترین همسایه اجتناب کرد. پیاده سازی. pseudocode زیر روش مار را به صورت کلی اجرا می کند: function v = snakes (I, v) % INPUT: N by M image I, a contour v of n control points % OUTPUT: converged contour v of n control points E_image = generateImageEnergy (I); while not converged F_cont = weight.alpha * contourDerivative(v, 2); F_curv = weight.beta * contourDerivative(v, 4); F_image = interp2 (E_image, v(:,2), v(:,1)); F_image_norm = weight.k * F_image ./ norm (F_image); F_con = inputForces(); F_internal = F_cont + weight.external * F_curv; F_external = weight.external * (F_image + F_con); v = upda
teSnake(v, F_internal, F_external); checkConvergence (); end end جایی که "generateImageEnergy (I)" را می توان به عنوان نوشته کرد function E_image = generateImageEnergy (I) [C, Cx, Cy, Cxx, Cxy, Cyy] = generateGradients (I); E_line = I; E_edge = -(Cx.^2 + Cy.^2)^0.5; E_term = (Cyy.*Cx.^2 - 2*Cxy.*Cx.*Cy + Cxx.*Cy.^2)./((1 + Cx.^2 + Cy.^2).^(1.5)); E_image = weight.line * E_line + weight.edge * E_edge + weight.term * E_term; end برخی از انواع مارها. روش پیش فرض مارها دارای محدودیت های مختلف و موارد گوشه ای است که همگرایی عملکرد ضعیفی دارد. چندین جایگزین وجود دارد که مسائل مربوط به روش پیش فرض را در بر می گیرد، هرچند با مشارکت خودشان. چند نفر در اینجا لیست شده اند. مدل مار GVF. مدل مار مارپیچ گرادیان (GVF) دو مسئله را با مارها مطرح می کند: در دو بعد، فیلد بردار GVF، کارکرد انرژی را به حداقل می رساند جایی که formula_51 یک اصطلاح هموار کنترل شده است. این را می توان با حل معادلات اویل حل کرد این را می توان از طریق تکرار به سمت یک مقدار ثابت حل کرد. این نتیجه نیروی پیش فرض خارجی را جایگزین می کند. مشکل اصلی با استفا
ده از GVF نرم کردن ترم formula_51 است که موجب گرد کردن لبه های کنتور می شود. کاهش ارزش formula_51 گرد کردن را کاهش می دهد اما مقدار صاف کردن را تضعیف می کند. مدل بالون. مدل بالون این مشکلات را با مدل کنتور پیش فرض فعال شرح می دهد: مدل بالون یک دوره تورم را به نیروهایی که بر روی مار اعمال می کنند معرفی می کند که formula_60 بردار واحد معمولی منحنی در formula_61 و formula_62 بزرگی نیرو است. formula_62 باید بزرگی یکسانی به عنوان formula_64 ضریب نرمالیزه تصویر داشته باشد و در ارزش از formula_64 کمتر باشد برای مجاز کردن نیروها در لبه های تصویر برای برانگیختن نیروی تورم. سه مسئله از استفاده از مدل بالون به وجود آمده است: مدل مارهای نفوذی. مدل مار نفوذی حساسیت مارها به نویز، کلفت و انسداد را مورد توجه قرار می دهد. این یک اصلاح ویژگی های و محدودیت کارتونی آن را به کار می گیرد و شامل دانش شکل است. عملکرد تصویر پیش فرض تصویر formula_66 جایگزین شده است با که formula_68 E_i براساس یک کارکرد مامفورد-شاه اصلاح شده است که formula_70 یک مدل صاف و از تصویر formula_71 با دامنه formula_72. مرزها formula_73 تعریف شده اند که formu
la_75 عملکرد پایه های B-اسپلین درجه دوم و formula_76 نقاط کنترل اسپلین هستند. محدودیت کارتونی اصلاح شده به عنوان formula_77 و تنظیمات معتبر از formula_68. تابع formula_79 بر اساس آموزش از تصاویر باینری از خطوط مختلف است و توسط پارامتر formula_80. برای یک توزیع گاوسی از بردارهای نقطه کنترل z formula_81 با میانگین بردار نقطه کنترل formula_82 و ماتریس کواریانس formula_83 سیگما، انرژی درجه دوم که با احتمال گاوسی مطابقت دارد استحکام این روش به قدرت داده های آموزشی و نیز تنظیم عملکرد مامورد-شاه تغییر یافته بستگی دارد. مارهای مختلف نیاز به مجموعه داده های مختلف آموزش و تنظیمات دارند. خطوط هندسی فعال. کانتور فعال هندسی، یا کانونی فعال ژئودزیک (GAC) یا کانونی های فعال کانونی، ایده هایی را از تکامل یقین ایدل استفاده می کند. کانتورها بسته به تشخیص اشیاء در تصویر تقسیم و ادغام می شوند. این مدلها عمدتاً از مجموعه های سطح الهام گرفته شده است و به طور گسترده در استفاده شده است. به عنوان مثال، معادله تکاملی منحنی زاویه گرادیان GAC است که formula_86 یک عمل متوقف است، "c" یک ضریب لاگرانژ است، formula_87 منحنی و formula_88 واحد
نرمال داخلی است. این شکل خاص از معادله تکامل منحنی تنها به سرعت در جهت نرمال وابسته است؛ بنابراین، با قرار دادن تابع تنظیم سطح، می توان آن را به صورت معادل در یک فرم یورلین بازنویسی کرد formula_89 به آن به شرح زیر است این اصلاح ساده و در عین حال قدرتمند سطح را قادر می سازد خطوط فعال برای مرتب سازی تغییرات توپولوژی در طی تکامل منحنی نزول شیب. این پیشرفت فوق العاده ای را در زمینه های مرتبط الهام داده است و با استفاده از روش های عددی برای حل دوباره تعریف سطح، اکنون به عنوان روش تعیین سطح شناخته می شود. وانگ و چان استدلال می کنند که تمام معادلات تکاملی منحنی باید مستقیماً توسط آن حل شود. تحولات اخیر در کانتورهای فعال در زمینه مدل سازی خواص منطقه ای، ترکیب قالب های انعطاف پذیر و تقسیم بندی کاملاً اتوماتیک و غیره. مدل های آماری که ترکیبی از ویژگی های محلی و جهانی هستند، توسط لانکتون و آلن تاننبام فرموله شده اند. ارتباط با کاهش گراف ها. برش گراف یا حداکثر جریان / دقیقه برش یک روش عمومی برای به حداقل رساندن یک شکل خاص انرژی به نام میدان مغناطیسی مارکوف (MRF) است. روش تقسیم گراف نیز به تقسیم بندی تصویر اعمال شده است
و گاهی اوقات از روش تعیین سطح در زمانی که مدل MRF استفاده می کند یا می تواند توسط MRF تقریب یابد، بهتر عمل می کند.
رزیتا شرف جهان متولد ۱۳۴۱، در تهران مجسمه ساز، نقاش و ویدئو آرتیست است. او فارغ التحصیل هنرستان در رشته مجسمه سازی است و کارشناسی نقاشی را از دانشکده هنرهای زیبای دانشگاه تهران دریافت کرده است. او به عنوان بنیان گذار و مدیر گالری طراحان آزاد ، تأثیر بسزایی در کشف برخی هنرمندان و استعداد های دهه هشتاد خورشیدی داشته است. همچنین از او به عنوان یکی از هنرمندان معاصر زن تأثیرگذار نام می برند. آثار او در مجموعه هایی چون موزه بیلوتی ایتالیا نگهداری می شود. تحصیلات. شرف جهان در سال ۱۳۵۶ وارد هنرستان شد و در رشته مجسمه سازی تحصیل کرد. بعد از فارغ التحصیلی از هنرستان، به خاطر انقلاب فرهنگی، نتوانست وارد دانشگاه شود. با چند نفر از دوستان، حدود ۳ سالی از طریق کلاس های آزاد زیر نظر استادانی چون یعقوب عمامه پیچ و عربعلی شروه، کار خود را ادامه دادیم تا دچار وقفه نشویم. در هنرستان جزو شاگردان برجسته دوره خودم بودم. دانشگاه ها که باز شد، گزینش با وسواس زیادی انجام می شد. سال اول از لحاظ علمی قبول شدم، اما نتوانستم وارد دانشگاه شوم و سال بعد در رشته نقاشی هنرهای زیبا پذیرفته شدم. تأسیس گالری. او در سال ۱۳۷۷ همزمان با تشکیل گرو
ه هنری سی، کارگاه شخصی خود را به فضایی برای نمایش آثار خود و دیگر همکارانش در گروه هنری سی اختصاص داد و گالری طراحان آزاد را به همراه محسن نبی زاده به صورت غیررسمی تأسیس کرد. سال ۱۳۷۸ با دریافت مجوز رسمی از وزارت ارشاد، گالری طراحان آزاد رسماً شروع به کار کرد. او در مصاحبه اش با روزنامه ایران می گوید: محل فعلی گالری را پدرم برای کارگاه در اختیارم گذاشت. بیش از هرچیز نیاز به چنین مراوداتی داشتم، نه تنها من بلکه این نیاز باقی دوستانم نیز بود که محلی برای خودمان داشته باشیم تا بتوانیم، بحث کنیم، کار ببینیم و کارهای خودمان را نشان بدهیم. شرف جهان که خود از هنرمندان شاخص زمان خود بود، توجه خود را معطوف به قالب هایی کرد که برای دیگر گالری دارها چندان قابل توجه نبود: با شروع نمایشگاه های مفهومی در موزه، افرادی به ما مراجعه می کردند که در حوزه «نیو مدیا» مثل ویدئو، صدا، اینستالیشن و غیره فعال بودند که حدود ۸ گالری فعال آن زمان به این هنرمندان وقت نمایشگاه نمی دادند؛ چراکه هدفشان نشان دادن نقاشی بود. اما او که خود علاقه مند به ویدئو، اینستالیشن، پرفورمنس آرت و رسانه های معاصری از این دست بود، از این رسانه های هنری است
قبال کرد. این رویه، گالری طراحان آزاد را به یکی از نگارخانه های پیشرو بعد از انقلاب تبدیل کرد. اندیشه های برابری طلبی. شرف جهان همواره معتقد بود که زنان و مردان برابرند: نمی خواستم بپذیرم کارهایی را که پسرها انجام می دهند، نمی توانم انجام بدهم. من هم زمانی می خواستم همانند مردها باشم. حتی مجسمه سازی را نیز به همین دلیل انتخاب کردم. سودای این را داشتم تا مجسمه های بزرگ بسازم یا سنگتراشی کنم. در نقاشی هم به این شکل، تلاش می کردم با ضربه قلم های پر قدرت، از هر چه که تصور می کردم جامعه مردسالار برای زن تعریف کرده، خودم را آزاد کنم. این مسئله به مرور اصلاح شد؛ باید می پذیرفتم که من زن هستم با خصوصیات و ویژگی های زنانه، ویژگی هایی که ارزشند، ضد ارزش نیستند. به هرحال این موضوع را در آثارم می توانید مشاهده کنید. یکی از مهمترین آثار او، تابلویی ست که تصویری از بهروز وثوقی را نشان می دهد. باوند بهپور منتقد هنری دربارهٔ این اثر می نویسد: او در این اثر، بهروز وثوقی، ستارهٔ سینمای دوران جوانی اش را به تصویر کشیده و با افزودن چند خنجر ملموس و واقعی بر کنشی که تداعی گر هیجان های دختری جوان به یک ستارهٔ سینما و یک سکس آیکن ا
ست، تأکید کرده است. محو کردن انبوهی از عکس های خواننده ها و بازیگران زن نیز در پس زمینهٔ کار به عنوان ابزاری برای جذب بیننده به سوی سوژهٔ اصلی کار قابل توجه است. فعالیت ها. شرف جهان علاوه بر فعالیت های هنری اش، مدرس دانشگاه نیز هست و در چندین نهاد عضویت فعال دارد: نمایشگاه های انفرادی. گزیده نمایشگاه های انفرادی نمایشگاه های گروهی. شرکت در بیشتر از ۷۰ دوسالانه، جشنواره و نمایشگاه گروهی نقاشی و ویدئو آرت در ایران، جمهوری چک، اتریش، ترکیه، ایتالیا، ژاپن، ارمنستان، فرانسه، هند، آلمان و کانادا نگارخانه. تعدادی از آثار رزیتا شرف جهان:
قایق Polaris AM-FIB یک قایق پرنده آبی ایتالیایی است که توسط پولاریس موتور طراحی و تولید شده است. این هواپیما در سال ۲۰۰۳ معرفی شد و به عنوان یک هواپیمای آماده پرواز به پرواز درآمد. مشخصات. خدمه: یکی گنجایش: یک نفر ارتفاع: ۱۱.۱۵ متر (۳۶ فوت ۷ اینچ) مساحت بال: ۱۹.۶ متر مربع (۲۱۱ فوت مربع) وزن خالی: ۲۳۹ کیلوگرم (۵۲۷ پوند) وزن ناخالص: ۴۰۶ کیلوگرم (PC پوند) ظرفیت سوخت: ۴۰ لیتر (۸.۸ گالن، ۱۱ گالن آمریکا) پروانه: ۳ پره حداکثر سرعت: ۸۰ کیلومتر بر ساعت (۵۰ مایل بر ساعت؛ ۴۳ گره)
گو دوکمو ()، (؟ ~ ۶۹۹) سومین پسر بوجانگ آخرین پادشاه گوگوریو و بیانگذار دودمان گوگوریو کوچک در سال ۶۹۹ میلادی بو‏دکه به دلیل تصرف گوگوریو توسط سلسله تانگ و متحدانش حکومت به او نرسید. او پس از بردن به تانگ، به عنوان فرماندار استان آندونگ منصوب شد و بر لیائودونگ حکومت کرد. زندگی. گفته می شود که گو دوکمو در سال ۶۶۹ یا ۶۶۲ میلادی به عنوان سومین پسر پادشاه بوجانگ به دنیا آمد. هنگامی که گوگوریو درسال ۶۶۸ سقوط کرد، او را به لوئویانگ تانگ بردند. با این حال زمانی که شیلا دودمان تانگ را در جنگ شیلا–تانگ شکست داد، سلسله تانگ نفوذ خود را در شبه جزیره کره از دست داد و دولت استانی آنجین را به لیائودونگ منتقل کرد و کنترل تانگ را به منطقه لیائودونگ محدود کرد. ملکه وو زتیان، آندونگ دوهوبو از لیائودونگ را به آندونگ دودوگبو در سال ۶۹۹ میلادی تنزل داد، و سپس گو دوکمو را به حاکمیت آندونگ دودوگبو منصوب کرد.
این مقاله توصیف قراردادهای فراخوانی (به انگلیسی: calling conventions) مورد استفاده، در هنگام برنامه نویسی میکروپروسسورهای معماری اکس۸۶ است. قراردادهای فراخوانی، رابط کاربری کد فراخوانی شده را توصیف می کند: این دقیقاً با تخصیص دادنِ اندازه ها و فرمت ها به انواع زبان برنامه نویسی مرتبط است. یکی دیگر از موضوع های خیلی مرتبط برانگیختگی نام (Name mangling) است، که تعیین می کند که چگونه نمادها در کد به نماد مورد استفاده در لینکر مرتبط و تبدیل شوند. قراردادهای فراخوانی، نمایندگی های نوع، و برانگیختگی نام، همه بخشی از آنچه که به عنوان یک رابط دودویی نرم افزار شناخته می شود هستند. اغلب تفاوت های ظریفی در نحوه پیاده سازی این قراردادها در کامپایلر های مختلف وجود دارد، بنابراین اغلب سخت است که کدی را که توسط کامپایلرهای مختلف کامپایل شده است نمایش دهیم. از سوی دیگر، قراردادهایی که به عنوان استاندارد API (مانند stdcall) مورد استفاده قرار می گیرند، به طور خیلی یکسان پیاده سازی می شوند. پیشینه تاریخی. قبل از میکرو رایانه ها، تولیدکننده دستگاه، به طور کلی یک سیستم عامل و کامپایلر هایی برای چند زبان برنامه نویسی ارائه می داد.
قرارداد (های) فراخوانی برای هر پلت فرم، توسط ابزار برنامه نویسیِ سازنده آن تعریف می شود. میکرو رایانه های اولیه قبل از Commodore Pet و اپل II به طور کلی بدون سیستم عامل یا کامپایلرها عرضه می شدند. رایانه شخصی آی بی ام با سیستم عامل دیسک (DOS) (پیشگام مایکروسافت برای ویندوز) عرضه شد، اما بدون کامپایلر. تنها سخت افزار استاندارد برای ماشین های سازگار با رایانه شخصی IBM توسط پردازنده های اینتل (۸۰۸۶، ۸۰۳۸۶) تعریف شد که سخت افزار تحت اللفظی IBM نامیده می شد. سپس فرمت های سخت افزاری و تمامی استانداردهای نرم افزاری (ذخیره برای قراردادهای فراخوانی BIOS) برای رقابت در بازار عرضه شد. بسیاری از شرکت های نرم افزارهای مستقل، سیستم عامل ها و کامپایلرهایی برای بسیاری از زبان های برنامه نویسی و برنامه های کاربردی ارائه می دهند. بسیاری از طرح های مختلف فراخوانی کردن توسط شرکت ها پیاده سازی شده است که اغلب متقابلاً منحصر به فرد، بر اساس الزامات مختلف، شیوه های تاریخی و خلاقیت برنامه نویس هستند. پس از انعطاف پذیری بازار IBM، سیستم عامل های و ابزارهای برنامه نویسی مایکروسافت (با قراردادهای متفاوت) غالب بودند، در حالی که شرکت ها
ی رده دوم مثل بورلند و نوول و پروژه های منبع بازمانند GCC هنوز استانداردهای خود را حفظ کردند. در نهایت مقررات مربوط به قابلیت همکاری بین فروشندگان و محصولات به تصویب رسید، ساده کردن مشکل انتخاب یک قرارداد قابل قبول بود. پاک شدن توسط فراخوانی کننده. در این قراردادها، فراخوانی کننده، آرگومان ها را از پشته پاک می کند. قرارداد cdecl. cdecl (که بر پایه تعریف C است) یک قرارداد فراخوانی است که از زبان برنامه نویسی C سرچشمه می گیرد و توسط بسیاری از کامپایلرهای C برای معماری x86 استفاده می شود. در cdecl، آرگومان های تابع به پشته منتقل می شوند. مقادیر اعداد صحیح و آدرس های حافظه به وسیلهٔ ثبات (رجیستر) EAX و مقادیر اعشاری در ثبّات ST0 x87 بازگردانده می شوند. ثبّات های EAX, ECX، و EDX ذخیره شده توسط فراخوانی کننده (به انگلیسی: caller-saved) و بقیه ذخیره شده توسط فراخوانی شونده (به انگلیسی: callee-saved) هستند. ثبّات های اعشاری x87 T ST0 تا ST7، هنگام فراخوانی یک تابع جدید باید خالی (برداشته شده یا آزاد) باشند و ST1 تا ST7 باید در هنگام خروج از یک تابع خالی باشد. ST0 نیز باید زمانی خالی باشد که برای بازگشت مقدار مورد است
فاده قرار نگیرد. در چارچوب زبان برنامه نویسی C، آرگومان های تابع بر روی پشته از راست به چپ قرار می گیرند، یعنی اول آخرین آرگومان قرار داده می شود. در لینوکس، GCC استانداردهای "واقعی را" برای قراردادهای فراخوانی تنظیم می کند. از زمان GCC نسخه ۴٫۵، هنگام فراخوانی یک تابع، پشته باید به یک مرز ۱۶ بایت برسد (نسخه های قبلی فقط یک تراز ۴ بایت نیاز داشتند) قطعه کد مرجعِ C زیر را در نظر بگیرید: int callee(int, int, int); int caller(void) return callee(1, 2, 3) + 5; در x86، ممکن است کد اسمبلی (به روش نوشتاری اینتل) زیر تولید کند: caller: push ebp ; save old call frame mov ebp, esp ; initialize new call frame push 3 push 2 push 1 call callee ; call subroutine 'callee' add eax, 5 ; modify subroutine result ; (eax is the return value of our callee, ; so we don't have to move it into a local variable) ; compilers will usually produce the following instead, ; which is just as fast, and, unlike the add instruction, ; also works for variable length arguments ; and variable length arrays allocated on the stack. mov esp, ebp ;
most calling conventions dictate ebp be callee-saved, ; i.e. it's preserved after calling the callee. ; it therefore still points to the start of our stack frame. ; we do need to make sure ; callee doesn't modify (or restores) ebp, though, ; so we need to make sure ; it uses a calling convention which does this pop ebp ; restore old call frame ret ; return فراخوانی کننده پس از اتمام فراخوانی کردن تابع، پشته را پاک می کند. برخی تغییرات در بیان cdecl, به ویژه در نحوه بازگشت مقادیر وجود دارد. در نتیجه، برنامه های کامپایل شده توسط x86 با سیستم عامل های مختلف یا کامپایلرهای مختلف می تواند ناسازگار باشد، حتی اگر آن ها هر دو از قراردادهای "cdecl" استفاده کنند و به محیط زیر وابسته نباشند. بعضی از کامپایلرها ساختار داده های ساده را با طول ۲ ثبّات یا کمتر در جفت ثبّات EAX: EDX برمی گردانند، و ساختارهای بزرگتر و اشیاء کلاس ها که نیاز به رفتار ویژه توسط رسیدگی کنندهٔ استثنا دارند (مانند سازندهٔ تعریف شده، تخریب کننده یا اختصاص دادن) به حافظه برگرداننده می شوند. برای انتقال "در حافظه"، فراخوانی کننده حافظه را اختصاص می ده
د و یک اشاره گر به آن را به عنوان پارامتر پنهان می دهد؛ فراخوانی شده حافظه را پر می کند و اشاره گر را برمی گرداند (هنگام بازگشت اشاره گر پنهان برداشته می شود). در لینوکس / GCC، مقادیر اعداد اعشاری هشت بایتی(double) / چهار بایتی(float) باید به وسیلهٔ شبه پشتهٔ x87 روی پشته قرار بگیرند. مثل این: sub esp, 8 ; make room for the double fld [ebp + x] ; load our double onto the floating point stack fstp [esp] ; push our double onto the stack call funct add esp, 8 با استفاده از این روش تضمین می شود که این در پشته به فرم صحیح قرار داده شده است. قراردادهای فراخوانی cdecl معمولاً قرارداد فراخوانی پیش فرض برای کامپایلر های x86 C است، اگر چه بسیاری از کامپایلرها مجهز به گزینه هایی برای تغییر خودکار قراردادهای فراخوانیِ استفاده شده هستند. برای تعریف کردن دستی تابع به عنوان cdecl، برخی نحو زیر را پشتیبانی می کند: return_type _cdecl func_name(); اصلاح کننده cdecl_ باید در نمونه اولیه تابع (به انگلیسی: function prototype) و در تعریف تابع گنجانده شود تا هر تنظیمات دیگری را که ممکن است در جای خود باشد را لغو کند. قرارداد syscal
l. این مشابه cdecl است در آن آرگومان ها از راست به چپ در استک قرارداده می شوند. ECX, EAX و EDX ذخیره نمی شوند. اندازه لیست پارامترها در doublewords به AL منتقل می شود. Syscall قرارداد فراخوانی استاندارد برای OS / 2 API سی و دو بیت (۳۲ بیت) است. قرارداد optlink. آرگومان ها از راست به چپ در پشته قرارداده می شوند. سه آرگومان اول (چپ ترین) در EAX, EDX و ECX منتقل می شود و بیشتر از چهار آرگومان اعشاری در ST0 از طریق ST3 منتقل می شود، اگرچه فضای آن ها در لیست آرگومان ها بر پشته رزرو می شود. نتایج در EAX یا ST0 برگردانده می شوند. ثبّات های EBP, EBX, ESI، و EDI حفظ می شوند. Optlink توسط کامپایلر IBM VisualAge استفاده می شود. پاک کردن توسط فراخوانی شده. در این قراردادها، تابع فراخوانی شده، آرگومان ها را از پشته پاک می کند. تشخیص توابعی ک این قراردادها را استفاده می کنند در کد ASM آسان است زیرا آن ها پس از بازگشت، پشته را باز می کنند. دستور x86 ret به پارامتر ۱۶ بیتی اختیاری اجازه می دهد که بعد از بازگشت به فراخوانی کننده، تعداد بایت های مشخصی از پشته را آزاد کند. نمونه ای از این کد به صورت زیر است: ret 12 قراردادهایی
به نام fastcall یا ثبّات استاندارد نشده اند و پیاده سازی آن بسته به نوع فروشنده کامپایلر متفاوت است. به طور معمول قراردادهای مبتنی بر ثبّات، یک یا چند آرگومان را به ثبّات هایی که تعداد دسترسی های حافظه مورد نیاز برای فراخوانی را کاهش می دهد و به این ترتیب آن ها را سریع تر می کند، ارسال می کنند پاسکال. بر اساس قرارداد فراخوانی زبان برنامه نویسی Borland Pascal، پارامترها بر روی پشته از چپ به راست (مخالف cdecl) قرار می گیرند و فراخوانی شده مسئول حذف آن ها از پشته است. بازگشت نتیجه به شرح زیر است: این قرارداد فراخوانی در APIهای ۱۶ بیتی زیر رایج بود: OS / 2 1.x، مایکروسافت ویندوز 3.x و Borland Delphi نسخه 1.x. نسخه های مدرن ویندوز API از stdcall استفاده می کنند، که هنوز هم فراخوانی شده پشته را طبق قرارداد پاسکال را ذخیره می کند، اما اکنون پارامترها از راست به چپ قرارداده می شوند. قرارداد stdcall. قرارداد فراخوانی stdcall تغییری در قرارداد فراخوانی پاسکال است که در آن فراخوانی شده مسئول پاک کردن پشته است، اما پارامترها در پشته به ترتیب از راست به سمت چپ، همان طور که در قرارداد فراخوانی _cdecl قرار دارد، قرار می گیر