{"id":261924,"date":"2015-07-21T09:57:03","date_gmt":"2015-07-21T05:57:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=261924"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=261924","title":{"rendered":"\u0421\u0435\u043c\u044c \u0432\u0438\u0434\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. \u0412 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e"},"content":{"rendered":"<br \/>\n<blockquote><p>\u0412\u0441\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 Computer Science \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u044b \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u0417\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0439: \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438.<br \/>  All problems in computer science can be solved by another level of indirection, except for the problem of too many layers of indirection.<\/p><\/blockquote>\n<p>  \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u044b \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u0441\u0432\u043e\u0435\u0439 \u043d\u0435\u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0442\u044b. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c.<br \/>  \u042f \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 <a href=\"http:\/\/habrahabr.ru\/company\/intel\/blog\/202926\/\">\u0445\u043e\u0442\u0435\u043b<\/a> \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u0432. \u041f\u0440\u044f\u043c\u043e \u0442\u0430\u043a\u0438 \u043e\u0431\u0435\u0449\u0430\u043b, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441\u0430\u043c\u043e\u043c\u0443 \u0441\u0435\u0431\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0449\u0438\u0445 (\u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u043e\u043f\u0440\u043e\u0432\u0435\u0440\u0433\u0430\u044e\u0449\u0438\u0445) \u043c\u043e\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b. \u041d\u043e \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u044f \u0433\u043e\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0447\u0442\u0435\u043d\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043f\u0440\u0438\u0447\u0451\u043c \u0434\u0430\u0436\u0435 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435, \u0447\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f.<br \/>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0441\u0435\u043c\u044c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0412\u041c \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041e\u0442 \u0441\u0430\u043c\u044b\u0445 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445 \u043c\u044b \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043a \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u043c, \u043f\u043e\u043e\u0447\u0435\u0440\u0451\u0434\u043d\u043e \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u044f\u0441\u044c \u043e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u00ab\u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439\u00bb \u0432 \u043a\u043e\u0434\u0435, \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<br \/>  \u0422\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0431\u043e\u0438\u0442\u0441\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0445 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u043e\u0432, \u0438\u0441\u043f\u0435\u0449\u0440\u0451\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430\u043c\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0421\u0438, \u043e\u0431\u0438\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0439 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u043e\u0439, goto \u0438 \u0434\u0430\u0436\u0435 longjmp, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442 \u0432\u043e \u0438\u043c\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0445 \u043a\u0443\u0441\u043a\u0438 \u0441\u0430\u043c\u0438\u0445 \u0441\u0435\u0431\u044f, \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442.<br \/>  <a name=\"habracut\"><\/a><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/1d3\/59e\/bf1\/1d359ebf18d54df68a8a357f818b36c4.png\"\/><br \/>  <i>\u0418\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u044b<\/i> \u2014 \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0445\u043e\u0434\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0442\u0435\u043a\u0441\u0442 \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0444\u0440\u0430\u0437\u0435 (\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e, \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044e, \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043c\u044b\u0441\u043b\u043e\u0432\u043e\u0439 \u0435\u0434\u0438\u043d\u0438\u0446\u0435) \u0437\u0430 \u0440\u0430\u0437 \u0438 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0445 \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u044d\u0442\u043e\u0439 \u0444\u0440\u0430\u0437\u043e\u0439 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u042d\u0442\u0438\u043c \u043e\u043d\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0444\u0430\u0437\u044b \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0440\u0430\u0437\u043d\u0435\u0441\u0435\u043d\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<br \/>  \u042d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0431\u0449\u0435\u0435, \u0438 \u043f\u043e\u0434 \u043d\u0435\u0433\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b (\u0412\u041c). \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 <a href=\"http:\/\/habrahabr.ru\/company\/intel\/blog\/254793\/\">\u0434\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430<\/a>: \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0435 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435.<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u044c, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0434\u0435\u0439, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u0431\u0443\u0434\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u0431\u044b\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u043d\u043e [3, 4]. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u0432 (\u0434\u043b\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0439 \u0412\u041c) \u0443\u0436\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c [2]. \u0415\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0435 \u043a\u043d\u0438\u0433\u0438 \u0441\u043e\u0432\u0435\u0442\u0441\u043a\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 [1] \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443. <\/p>\n<p>  1. \u042f \u043f\u043e\u0437\u0432\u043e\u043b\u044e \u0441\u0435\u0431\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c\u0441\u044f \u0445\u043e\u0437\u044f\u0439\u0441\u043a\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 Intel\u00ae 64. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0434\u0435\u043b\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. \u042f \u043f\u0440\u0438\u0437\u044b\u0432\u0430\u044e \u0432\u0441\u0435\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u043e\u0442\u0447\u0451\u0442\u043b\u0438\u0432\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u0435\u0442\u0430\u043b\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u043c\u0438\u043a\u0440\u043e\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b (\u0442\u0430\u043a\u0438\u0435, \u043a\u0430\u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432) \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u0432. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c A, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 B \u043d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 Z, \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u044c \u0435\u043c\u0443 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 Y.<\/p>\n<p>  2. \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430 \u0431\u044b\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0441 \u0440\u0430\u0441\u0447\u0451\u0442\u043e\u043c \u043d\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438. \u041e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c\u0438 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 GCC \u0438 ICC \u043d\u0430 POSIX-\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445. \u041d\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u00ab\u043d\u0435\u043f\u043e\u0440\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435\u00bb \u043c\u0435\u0441\u0442\u0430 \u044f \u0431\u0443\u0434\u0443 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>  3. \u0420\u0430\u0441\u0441\u043a\u0430\u0437 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u044b, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0434\u043b\u044f \u043d\u0443\u0436\u0434 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432. \u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0430\u043b\u0435\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0444\u0430\u0437\u044b \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043c\u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0445 \u044d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0439 (\u0440\u0435\u0448\u0430\u0435\u043c\u043e\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438). <\/p>\n<p>  4. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u0440\u043e \u0440\u0430\u0437\u0431\u043e\u0440 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e \u0442\u0443 \u0447\u0430\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u0432 \u044f\u0437\u044b\u043a\u043e\u0432 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u0412 \u043a\u043d\u0438\u0433\u0435 Terrence Parr [5], \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044f ANTLR \u2014 \u043c\u043e\u0449\u043d\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043b\u0435\u043a\u0441\u0435\u0440\u043e\u0432, \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432 \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0441\u043f\u0435\u0440\u0432\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u2014 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b.<\/p>\n<h3>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u0439 \u0412\u041c<\/h3>\n<p>  \u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 Makefile \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u044b \u0437\u0434\u0435\u0441\u044c: <a href=\"https:\/\/github.com\/grigory-rechistov\/interpreters-comparison\/\">github.com\/grigory-rechistov\/interpreters-comparison<\/a>.<br \/>  \u0414\u0430\u043b\u0435\u0435 \u044f \u0431\u0443\u0434\u0443 \u0446\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0443\u0441\u043a\u0438 \u043a\u043e\u0434\u0430 \u043e\u0442\u0442\u0443\u0434\u0430 \u0438 \u043e\u0442\u0441\u044b\u043b\u0430\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0430\u043c \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0443\u0436\u0434 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0445\u043e\u0442\u0435\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0412\u041c, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0443\u044e, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u043f\u0435\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u043e\u0442\u043b\u0430\u0434\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0435\u0451 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u0443\u044e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430 \u043d\u0435\u0439 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b, \u043f\u0440\u0438\u0441\u0443\u0449\u0438\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c, \u0438 \u0447\u0442\u043e\u0431\u044b \u043d\u0430 \u043d\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0443\u0447\u043d\u044b\u0439 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439.<br \/>  \u0412 \u0446\u0435\u043b\u043e\u043c \u044d\u0442\u0430 \u0412\u041c \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u044f\u0437\u044b\u043a\u043e\u043c \u0424\u043e\u0440\u0442. \u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043d\u0438\u043c \u043e\u043d\u0430 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0430 \u0438 \u0438\u043c\u0435\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u043b\u044f \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0438\u0434\u0435\u0439. \u0421\u0430\u043c\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0435\u0451 \u0443\u043f\u0443\u0449\u0435\u043d\u0438\u044f (\u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f) \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0424\u043e\u0440\u0442\u043e\u043c \u2014 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0438 \u0441\u043b\u043e\u0432\u0430\u0440\u044f.<br \/>  \u0425\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u0435\u043a\u043e\u0432\u044b\u0445, \u043d\u043e \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432\u044b\u0445 \u0412\u041c.<\/p>\n<ol>\n<li>\u0428\u0438\u0440\u0438\u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u2014 32 \u0431\u0438\u0442\u0430. \u0412\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u044b \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e \u0437\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0438\u043b\u0438 \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u044b\u0435 32-\u0431\u0438\u0442\u043d\u044b\u0435 \u0446\u0435\u043b\u044b\u0435 \u0447\u0438\u0441\u043b\u0430<\/li>\n<li>\u0422\u0440\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430: Running \u2014 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439; Halted \u2014 \u043e\u0441\u0442\u0430\u043d\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 Halt, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b; Break \u2014 \u043e\u0441\u0442\u0430\u043d\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u043b\u044e\u0431\u043e\u0439 \u043d\u0435\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439, \u043d\u0435\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u0438\u043b\u0438 \u0432\u044b\u0437\u0432\u0430\u0432\u0448\u0435\u0439 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0412\u041c \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 Running. \u0417\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442 \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 Halted, \u0435\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043b\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 Halt. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043d\u043e\u043b\u044c, \u0432\u044b\u0445\u043e\u0434 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043a\u043e\u0434\u0430, \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430, \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0451, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043e\u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Break.<\/li>\n<li>\u0412\u0441\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u2014 \u043d\u0435\u044f\u0432\u043d\u044b\u0435, \u0430 \u0432\u0441\u0435\u0433\u043e \u0438\u0445 \u0434\u0432\u0430. PC \u2014 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. SP \u2014 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0441\u0442\u0435\u043a\u0430. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u044b PC=0, SP=-1.<\/li>\n<li>\u0421\u0442\u0435\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u043e\u0439 32 \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0446\u0435\u043b\u044b\u0445 \u0441\u043b\u043e\u0432\u0430. SP \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0438\u043b\u0438 \u0436\u0435 \u0440\u0430\u0432\u0435\u043d -1, \u0435\u0441\u043b\u0438 \u0441\u0442\u0435\u043a \u043f\u0443\u0441\u0442.<\/li>\n<li>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0451\u043c\u043a\u043e\u0441\u0442\u044c\u044e \u0432 512 \u0441\u043b\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435. \u041f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b [0; 511] \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 Break.<\/li>\n<li>\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u043d\u043e\u043b\u044c \u0438\u043b\u0438 \u043e\u0434\u0438\u043d \u044f\u0432\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u043d\u0434 (imm). \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0438 \u0438\u043c\u0435\u044e\u0442 \u0434\u043b\u0438\u043d\u0443 \u0432 \u043e\u0434\u043d\u043e \u0441\u043b\u043e\u0432\u043e, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u2014 \u0434\u0432\u0430.<\/li>\n<li> \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u041a\u043e\u0434\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0412\u041c, \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 common.h.<br \/> \n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430\u0431\u043e\u0440\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439<\/b><\/p>\n<div class=\"spoiler_text\">Break = 0x0000 \u2014 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 Break. \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043d\u0443\u043b\u044f\u043c\u0438, \u043b\u044e\u0431\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u00ab\u043c\u0438\u043c\u043e \u043a\u043e\u0434\u0430\u00bb \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435.<br \/>  Nop = 0x0001 \u2014 \u043f\u0443\u0441\u0442\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0449\u0430\u044f \u0441\u0442\u0435\u043a \u0438 SP.<br \/>  Halt = 0x0002 \u2014 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 Halted.<br \/>  Push = 0x0003 imm \u2014 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 imm \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0441\u0442\u0435\u043a\u0430.<br \/>  Print = 0x0004 \u2014 \u0441\u043d\u044f\u0442\u044c \u0441 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0441\u0442\u0435\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435.<br \/>  JNE = 0x0005 imm \u2014 \u0441\u043d\u044f\u0442\u044c \u0441 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0441\u0442\u0435\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u043d\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e, \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u0442\u044c imm \u043a PC. imm \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u0440\u0430\u043a\u0442\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0447\u0438\u0441\u043b\u043e \u0441\u043e \u0437\u043d\u0430\u043a\u043e\u043c.<br \/>  Swap = 0x0006 \u2014 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0441\u0442\u0435\u043a\u0430 \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430 \u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442.<br \/>  Dup = 0x0007 \u2014 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0441\u0442\u0435\u043a\u0430 \u043a\u043e\u043f\u0438\u044e \u0441\u0430\u043c\u043e\u0433\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<br \/>  JE = 0x0008 imm \u2014 \u0441\u043d\u044f\u0442\u044c \u0441 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0441\u0442\u0435\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e, \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u0442\u044c imm \u043a PC. imm \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u0440\u0430\u043a\u0442\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0447\u0438\u0441\u043b\u043e \u0441\u043e \u0437\u043d\u0430\u043a\u043e\u043c.<br \/>  Inc = 0x0009 \u2014 \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u0441\u0442\u0435\u043a\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443.<br \/>  Add = 0x000a \u2014 \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0432\u0430 \u0432\u0435\u0440\u0445\u043d\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0442\u0435\u043a\u0430. \u0421\u043d\u044f\u0442\u044c \u0438\u0445 \u0441\u043e \u0441\u0442\u0435\u043a\u0430 \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u0430\u043a \u0432\u0435\u0440\u0448\u0438\u043d\u0443.<br \/>  Sub = 0x000b \u2014 \u0432\u044b\u0447\u0435\u0441\u0442\u044c \u0438\u0437 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0442\u0435\u043a\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430 \u043d\u0438\u043c. \u0421\u043d\u044f\u0442\u044c \u0438\u0445 \u0441\u043e \u0441\u0442\u0435\u043a\u0430 \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0443. <br \/>  Mul = 0x000c \u2014 \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u0434\u0432\u0430 \u0432\u0435\u0440\u0445\u043d\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0442\u0435\u043a\u0430. \u0421\u043d\u044f\u0442\u044c \u0438\u0445 \u0441\u043e \u0441\u0442\u0435\u043a\u0430 \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u0430\u043a \u0432\u0435\u0440\u0448\u0438\u043d\u0443.<br \/>  Rand = 0x000d \u2014 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0441\u0442\u0435\u043a\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e.<br \/>  Dec = 0x000e \u2014 \u0432\u044b\u0447\u0435\u0441\u0442\u044c \u0438\u0437 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0441\u0442\u0435\u043a\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443.<br \/>  Drop = 0x000f \u2014 \u0441\u043d\u044f\u0442\u044c \u0441 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0441\u0442\u0435\u043a\u0430 \u0447\u0438\u0441\u043b\u043e \u0438 \u00ab\u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442\u044c\u00bb \u0435\u0433\u043e.<br \/>  Over = 0x0010 \u2014 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0441\u0442\u0435\u043a\u0430 \u043a\u043e\u043f\u0438\u044e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u044f\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0432\u0442\u043e\u0440\u044b\u043c \u0432 \u0441\u0442\u0435\u043a\u0435 \u043f\u043e\u0441\u043b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b.<br \/>  Mod = 0x0011 \u2014 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0442\u0435\u043a\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430 \u043d\u0438\u043c. \u0421\u043d\u044f\u0442\u044c \u0438\u0445 \u0441\u043e \u0441\u0442\u0435\u043a\u0430 \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043e\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0443. <br \/>  Jump = 0x0012 imm \u2014 \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u0442\u044c imm \u043a PC. imm \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u0440\u0430\u043a\u0442\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0447\u0438\u0441\u043b\u043e \u0441\u043e \u0437\u043d\u0430\u043a\u043e\u043c.<\/p>\n<p>  \u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0449\u0438\u0435 \u043a \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e (\u043a\u0440\u043e\u043c\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u043e\u043b\u044c), \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 Break \u0438 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f.<br \/>  \u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0432\u0441\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c (\u0442.\u0435. Jump, JE, JNE), \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u044e\u0442 PC \u043d\u0430 \u0441\u0432\u043e\u044e \u0434\u043b\u0438\u043d\u0443 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430. \u0422.\u0435. \u043f\u0440\u044b\u0436\u043e\u043a \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439.  <\/div>\n<\/div>\n<p>  <\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u044f\u0432\u043d\u043e, \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e Break.<\/li>\n<li>\u0414\u043b\u044f \u043d\u0443\u0436\u0434 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 64-\u0431\u0438\u0442\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 steps, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0412\u041c. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0435\u043b \u0447\u0438\u0441\u043b\u0430 \u0448\u0430\u0433\u043e\u0432, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d \u0440\u0430\u0432\u0435\u043d LLONG_MAX.<\/li>\n<li>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432\u044b\u0432\u043e\u0434\u044f\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u0441\u0442\u0435\u043a\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d.<\/li>\n<\/ol>\n<h3>\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a<\/h3>\n<p>  \u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0443\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0412\u041c. \u041e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u043e\u0439, \u0441 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0440\u0435\u0437\u043c\u0435\u0440\u043d\u043e \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434, \u0442.\u0435. \u0431\u044b\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e-\u0441\u043b\u043e\u0436\u043d\u043e\u0439. \u0418 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0441\u0441\u0435\u044f\u043d\u043d\u044b\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u043a\u0430\u043a \u044f, \u0441\u043c\u043e\u0433 \u0431\u044b \u043e\u0442\u043b\u0430\u0434\u0438\u0442\u044c \u0435\u0451 \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0445 \u043a\u043e\u0434\u0430\u0445 \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0442\u043e, \u0447\u0442\u043e \u044f \u043d\u0430\u0437\u0432\u0430\u043b Primes.<br \/>  Primes \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u043e\u0442\u0440\u0435\u0437\u043a\u0435 \u043e\u0442 2 \u0434\u043e 100000. \u0415\u0451 \u043a\u043e\u0434 \u0434\u043b\u044f \u0412\u041c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 Primes[], \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u043c \u0432\u043e \u0432\u0441\u0435\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Primes<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> const Instr_t Primes[PROGRAM_SIZE] = {     Instr_Push, 100000, \/\/ nmax (maximal number to test)     Instr_Push, 2,      \/\/ nmax, c (minimal number to test)     \/* back: *\/     Instr_Over,         \/\/ nmax, c, nmax     Instr_Over,         \/\/ nmax, c, nmax, c     Instr_Sub,          \/\/ nmax, c, c-nmax     Instr_JE, +23, \/* end *\/ \/\/ nmax, c     Instr_Push, 2,       \/\/ nmax, c, divisor     \/* back2: *\/     Instr_Over,         \/\/ nmax, c, divisor, c     Instr_Over,         \/\/ nmax, c, divisor, c, divisor     Instr_Swap,          \/\/ nmax, c, divisor, divisor, c     Instr_Sub,          \/\/ nmax, c, divisor, c-divisor     Instr_JE, +9, \/* print_prime *\/ \/\/ nmax, c, divisor     Instr_Over,          \/\/ nmax, c, divisor, c     Instr_Over,          \/\/ nmax, c, divisor, c, divisor     Instr_Swap,          \/\/ nmax, c, divisor, divisor, c     Instr_Mod,           \/\/ nmax, c, divisor, c mod divisor     Instr_JE, +5, \/* not_prime *\/ \/\/ nmax, c, divisor     Instr_Inc,           \/\/ nmax, c, divisor+1     Instr_Jump, -15, \/* back2 *\/  \/\/ nmax, c, divisor     \/* print_prime: *\/     Instr_Over,          \/\/ nmax, c, divisor, c     Instr_Print,         \/\/ nmax, c, divisor     \/* not_prime *\/     Instr_Drop,          \/\/ nmax, c     Instr_Inc,           \/\/ nmax, c+1     Instr_Jump, -28, \/* back *\/   \/\/ nmax, c     \/* end: *\/     Instr_Halt           \/\/ nmax, c (== nmax) }; <\/pre>\n<\/div>\n<\/div>\n<p>  \u0412 \u043c\u043e\u0438\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0445 \u043e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c \u043e\u0442 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u0434\u043e \u0442\u0440\u0451\u0445 \u043c\u0438\u043d\u0443\u0442. \u0415\u0451 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e (\u0441 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043d\u0430 \u0441\u0442\u0435\u043a\u043e\u0432\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443) \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0439\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 native.c.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">main() \u0438\u0437 native.c<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> int main() {     for (int i = 2; i &lt; 100000; i++) {         bool is_prime = true;         for (int divisor = 2; divisor &lt; i; divisor++) {             if (i % divisor == 0) {                 is_prime = false;                 break;             }         }         if (is_prime)             printf(&quot;[%d]\\n&quot;, i);     }     return 0; } <\/pre>\n<\/div>\n<\/div>\n<h3>\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u043e\u0431 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/h3>\n<p>  <\/p>\n<blockquote><p>\u041e\u0434\u0438\u043d \u0432\u0432\u043e\u0434\u044f\u0449\u0438\u0439 \u0432 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430 \u0433\u043e\u0434\u044b \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b.<br \/>  A misleading benchmark test can accomplish in minutes what years of good engineering can never do.<br \/>  <a href=\"http:\/\/dilbert.com\/strip\/2009-03-02\">dilbert.com\/strip\/2009-03-02<\/a> <\/p><\/blockquote>\n<p>  \u042f \u0445\u043e\u0447\u0443 \u0435\u0449\u0451 \u0440\u0430\u0437 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044c \u043e\u0434\u0438\u043d \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439: <i>\u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u0432\u0435\u0440\u0438\u0442\u044c<\/i>. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435: \u00ab\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c X \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0432\u043e\u0435\u0433\u043e Y, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435\u00bb. \u041d\u0435\u043b\u044c\u0437\u044f \u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u043f\u0435\u043a\u0442\u0430\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f\u043c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b, \u0441\u0442\u0430\u0442\u044c\u044f\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432, \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u044f\u043c \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u041d\u0435\u043b\u044c\u0437\u044f \u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0432\u043e\u0435\u043c\u0443 \u0447\u0443\u0442\u044c\u044e \u2014 \u0432 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u0445 \u043f\u043e\u0438\u0441\u043a\u0430 \u0443\u0437\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u043d\u043e \u0432\u0440\u0451\u0442 \u0435\u0449\u0451 \u043a\u0430\u043a. \u0412\u0435\u0440\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u043a\u0438, \u0438 \u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430. <\/p>\n<p>  \u0422\u0435\u043c \u043c\u0435\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0435\u0440\u0438\u0442\u044c \u043c\u043d\u0435. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u2014 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 Primes, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0441\u043c\u0435\u0445\u043e\u0442\u0432\u043e\u0440\u043d\u043e \u043d\u0430\u0438\u0432\u043d\u0430: \u043c\u0430\u043b\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u0432\u0440\u044f\u0434 \u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0441\u043a\u043e\u043b\u044c-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u0432\u0441\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0442\u0430\u043a \u0435\u0449\u0451 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u043d\u0435\u0439, \u043d\u0435\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u0435\u043d! \u0412 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 N \u043d\u0435\u0442 \u043d\u0443\u0436\u0434\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0434\u0435\u043b\u0438\u043c\u043e\u0441\u0442\u044c N \u043d\u0430 N-1, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 \u043e\u0442 2 \u0434\u043e \u221aN\u0305. \u041e\u043d\u0430 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0442\u0430\u043a \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u043b!<br \/>  \u0414\u0430 \u0438 \u0412\u041c, \u0447\u0435\u0433\u043e \u0443\u0436 \u0442\u0430\u043c, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442. \u041e\u0431\u044a\u0451\u043c\u044b \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u044b\u0435, \u0434\u0430\u0436\u0435 8-\u0431\u0438\u0442\u043d\u044b\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0447\u0430\u0441\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0411\u0435\u0437 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0443\u0435\u0434\u0435\u0448\u044c. <s>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0441\u0435\u043c\u0435\u0441\u0442\u0440\u0435 \u044f \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044e \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0435\u0451 \u0434\u043e \u0432\u043c\u0435\u043d\u044f\u0435\u043c\u043e \u043c\u043e\u043d\u0441\u0442\u0440\u0443\u043e\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432, \u0445\u0435\u0445\u0435\u0445\u0435!<\/s><\/p>\n<p>  \u041d\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u043b\u0443\u0436\u0438\u0442 \u043b\u0438\u0448\u044c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0446\u0435\u043b\u0438. \u0415\u0441\u043b\u0438 \u0431\u044b \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0431\u044b\u043b \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u0435\u043d, \u0430 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0431\u044b\u043b\u0430 \u0431\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432, \u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0445.<\/p>\n<p>  \u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u043e\u0431 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u041d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0438 \u0445\u043e\u0437\u044f\u0439\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u0431\u0433\u043e\u043d\u0438\u0442 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b. \u042f \u0441\u0430\u043c \u0431\u044b\u043b \u0443\u0434\u0438\u0432\u043b\u0451\u043d, \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u2014 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u043c\u043e\u0438\u043c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f\u043c; \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0432\u044b\u0432\u0435\u043b\u0438 \u0432 \u043b\u0438\u0434\u0435\u0440\u044b \u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432. \u041d\u043e \u044f \u043e\u043f\u044f\u0442\u044c \u0437\u0430\u0431\u0435\u0433\u0430\u044e \u0432\u043f\u0435\u0440\u0451\u0434.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0439 (switched)<\/h3>\n<p>  \u041f\u0435\u0440\u0432\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u2014 <i>\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440<\/i> (\u0444\u0430\u0439\u043b switched.c). \u0415\u0451 \u043a\u043e\u0434 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0446\u0438\u043a\u043b \u00ab\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u0434 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u2014 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u2014 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u2014 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c\u00bb. \u0422\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0430\u044f \u0441\u0445\u0435\u043c\u0430, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0432\u0441\u0435 \u0444\u0430\u0437\u044b \u044d\u0442\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0432\u044b\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u0434\u0435 \u0412\u041c; \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043b\u0438\u0448\u044c \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f (\u043d\u0438\u043a\u0442\u043e \u0436\u0435 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043e\u0442\u043d\u0438 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u043f\u043e\u0445\u043e\u0436\u0435\u0433\u043e \u043a\u043e\u0434\u0430).<\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f fetch() \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u00ab\u0441\u044b\u0440\u043e\u0439 \u043a\u043e\u0434\u00bb \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0439\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 PC. \u0422\u0430\u043a \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u0412\u041c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u043a \u0432\u044b\u0445\u043e\u0434\u0443 PC \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0430\u043c\u044f\u0442\u0438; \u0437\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 fetch_checked().<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043a\u043e\u0434 fetch() \u0438 fetch_checked()<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> static inline Instr_t fetch(const cpu_t *pcpu) {     assert(pcpu);     assert(pcpu-&gt;pc &lt; PROGRAM_SIZE);     return pcpu-&gt;pmem[pcpu-&gt;pc]; };  static inline Instr_t fetch_checked(cpu_t *pcpu) {     if (!(pcpu-&gt;pc &lt; PROGRAM_SIZE)) {         printf(&quot;PC out of bounds\\n&quot;);         pcpu-&gt;state = Cpu_Break;         return Instr_Break;     }     return fetch(pcpu); } <\/pre>\n<\/div>\n<\/div>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f decode() \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u0442\u043e\u0435 \u0432 fetch() \u2014 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0435\u0451 \u0434\u043b\u0438\u043d\u0430 (1 \u0438\u043b\u0438 2) \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0442\u0435\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043d \u0435\u0441\u0442\u044c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u043c \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f\u043c \u0432\u0441\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043e\u043f\u043a\u043e\u0434\u044b \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u043c\u0438 Break. \u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 switch.<br \/>  \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u00ab\u0434\u043b\u0438\u043d\u043d\u044b\u0445\u00bb \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0441 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u043e\u043c: \u043e\u043d\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 PC+1, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043a\u043e\u0434 decode()<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> static inline decode_t decode(Instr_t raw_instr, const cpu_t *pcpu) {     assert(pcpu);     decode_t result = {0};     result.opcode = raw_instr;     switch (raw_instr) {     case Instr_Nop:     case Instr_Halt:     case Instr_Print:     case Instr_Swap:     case Instr_Dup:     case Instr_Inc:     case Instr_Add:     case Instr_Sub:     case Instr_Mul:     case Instr_Rand:     case Instr_Dec:     case Instr_Drop:     case Instr_Over:     case Instr_Mod:         result.length = 1;         break;     case Instr_Push:     case Instr_JNE:     case Instr_JE:     case Instr_Jump:         result.length = 2;         if (!(pcpu-&gt;pc+1 &lt; PROGRAM_SIZE)) {             printf(&quot;PC+1 out of bounds\\n&quot;);             pcpu-&gt;state = Cpu_Break;             break;         }         result.immediate = (int32_t)pcpu-&gt;pmem[pcpu-&gt;pc+1];         break;     case Instr_Break:     default: \/* Undefined instructions equal to Break *\/         result.length = 1;         result.opcode = Instr_Break;         break;     }     return result; } <\/pre>\n<\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0445 <a href=\"http:\/\/habrahabr.ru\/company\/intel\/blog\/202926\/\">\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440<\/a> \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0412\u041c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <a href=\"http:\/\/habrahabr.ru\/company\/intel\/blog\/254419\/\">\u0441\u043b\u043e\u0436\u043d\u0435\u0435<\/a>: \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u043e \u0434\u0435\u0440\u0435\u0432\u0443 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u0432, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0438\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 switch. \u041d\u043e \u044f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u043e\u0431\u0449\u0443\u044e \u0438\u0434\u0435\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u2014 \u043f\u043e \u043a\u043e\u0434\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0437 decode(), \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 <i>\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443<\/i> (service routine) \u2014 \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430, \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0437\u0430 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u0415\u0449\u0451 \u043e\u0434\u0438\u043d switch, \u0432\u043e \u0432\u0441\u0435\u0439 \u0435\u0433\u043e <s>\u043a\u0440\u0430\u0441\u0435<\/s> \u0434\u043b\u0438\u043d\u0435.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043a\u043e\u0434 switch<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre>         uint32_t tmp1 = 0, tmp2 = 0;         \/* Execute - a big switch *\/         switch(decoded.opcode) {         case Instr_Nop:             \/* Do nothing *\/             break;         case Instr_Halt:             cpu.state = Cpu_Halted;             break;         case Instr_Push:             push(&cpu, decoded.immediate);             break;         case Instr_Print:             tmp1 = pop(&cpu); BAIL_ON_ERROR();             printf(&quot;[%d]\\n&quot;, tmp1);             break;         case Instr_Swap:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1);             push(&cpu, tmp2);             break;         case Instr_Dup:             tmp1 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1);             push(&cpu, tmp1);             break;         case Instr_Over:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp2);             push(&cpu, tmp1);             push(&cpu, tmp2);             break;         case Instr_Inc:             tmp1 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1+1);             break;         case Instr_Add:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1 + tmp2);             break;         case Instr_Sub:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1 - tmp2);             break;         case Instr_Mod:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             if (tmp2 == 0) {                 cpu.state = Cpu_Break;                 break;             }             push(&cpu, tmp1 % tmp2);             break;         case Instr_Mul:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1 * tmp2);             break;         case Instr_Rand:             tmp1 = rand();             push(&cpu, tmp1);             break;         case Instr_Dec:             tmp1 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1-1);             break;         case Instr_Drop:             (void)pop(&cpu);             break;             case Instr_JE:             tmp1 = pop(&cpu);             BAIL_ON_ERROR();             if (tmp1 == 0)                 cpu.pc += decoded.immediate;             break;         case Instr_JNE:             tmp1 = pop(&cpu);             BAIL_ON_ERROR();             if (tmp1 != 0)                 cpu.pc += decoded.immediate;             break;         case Instr_Jump:             cpu.pc += decoded.immediate;             break;         case Instr_Break:             cpu.state = Cpu_Break;             break;         default:             assert(&quot;Unreachable&quot; && false);             break;         } <\/pre>\n<\/div>\n<\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 BAIL_ON_ERROR \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0438\u0445 \u0432 \u0445\u043e\u0434\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434:  <\/p>\n<pre> #define BAIL_ON_ERROR() if (cpu.state != Cpu_Running) break; <\/pre>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044d\u0442\u043e \u0421\u0438, \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 try-catch \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f (\u043e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0433\u043e\u0434\u0438\u0442\u0435, \u0431\u043b\u0438\u0436\u0435 \u043a \u043a\u043e\u043d\u0446\u0443 \u0441\u0442\u0430\u0442\u044c\u0438 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u0435-\u0447\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u043d\u0435\u0433\u043e).<br \/>  \u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0443\u0434\u0438\u0432\u0438\u0442\u044c\u0441\u044f \u2014 \u0437\u0430\u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u0430 switch: \u0432 decode() \u0438 \u0432 main(), \u2014 \u0432\u0435\u0434\u044c \u043e\u043d\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0437\u0430 \u0434\u0440\u0443\u0433\u0438\u043c \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u043e\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u0430 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0435\u043a\u0446\u0438\u0438, \u0433\u0434\u0435 \u043c\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u043c\u0441\u044f \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c decode().<\/p>\n<h3>\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (pre-decoding)<\/h3>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435, \u043e\u0442 \u0447\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u2014 \u044d\u0442\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 (\u0444\u0430\u0439\u043b predecoded.c). \u0412 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b, \u0438\u043b\u0438 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0447\u0430\u0441\u0442\u043e: \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438\u043b\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0438\u0437\u0440\u0435\u0434\u043a\u0430 \u0441\u0430\u043c\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c (JIT-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0441\u0432\u043e\u0438 \u043a\u0443\u0441\u043a\u0438). \u0412 \u043d\u0430\u0448\u0435\u0439 \u0412\u041c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0438 \u044d\u0442\u0438\u043c \u043d\u0430\u0434\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043a\u043e\u0434 predecode_program()<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> static void predecode_program(const Instr_t *prog,                            decode_t *dec, int len) {     assert(prog);     assert(dec);     \/* The program is short, so we can decode it as a whole.        Otherwise, some sort of lazy decoding will be required *\/     for (int i=0; i &lt; len; i++) {         dec[i] = decode_at_address(prog, i);     } } <\/pre>\n<\/div>\n<\/div>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u044d\u0442\u043e\u0439 \u0412\u041c \u0432\u0441\u0435\u0433\u043e 512 \u0441\u043b\u043e\u0432, \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0432\u0441\u044e \u0441\u0440\u0430\u0437\u0443 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435, \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c PC. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0412\u041c \u0441 \u043e\u0431\u044a\u0451\u043c\u0430\u043c\u0438 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 2\u00b3\u00b2\u20132\u2076\u2074 \u0431\u0430\u0439\u0442 \u044d\u0442\u043e\u0442 \u0442\u0440\u044e\u043a \u043d\u0435 \u043f\u0440\u043e\u0448\u0451\u043b \u0431\u044b. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0430-\u043b\u044f \u043a\u044d\u0448 \u0441 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u043c \u043e\u0431\u044a\u0451\u043c\u0435 \u0445\u043e\u0437\u044f\u0439\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0445\u0440\u0430\u043d\u0438\u043b \u0431\u044b \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0439 \u00abPC \u2192 decode_t\u00bb. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043a\u044d\u0448 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u0440\u0438 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u0438 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u044b\u043b \u0431\u044b \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u041f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438\u0445 \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0437\u0430\u043d\u043e\u0432\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  \u041d\u0443 \u0430 \u0442\u0430\u043a \u2014 \u0432\u044b\u0437\u043e\u0432\u0435\u043c predecode_program() \u0434\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0441 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre>     decode_t decoded_cache[PROGRAM_SIZE];     predecode_program(cpu.pmem, decoded_cache, PROGRAM_SIZE);          while (cpu.state == Cpu_Running && cpu.steps &lt; steplimit) {         if (!(cpu.pc &lt; PROGRAM_SIZE)) {             printf(&quot;PC out of bounds\\n&quot;);             cpu.state = Cpu_Break;             break;         }          decode_t decoded = decoded_cache[cpu.pc];         uint32_t tmp1 = 0, tmp2 = 0;         \/* Execute - a big switch *\/         switch(decoded.opcode) {         case Instr_Nop:             \/* Do nothing *\/             break;         case Instr_Halt:             cpu.state = Cpu_Halted;             break;         case Instr_Push:             push(&cpu, decoded.immediate);             break;         case Instr_Print:             tmp1 = pop(&cpu); BAIL_ON_ERROR();             printf(&quot;[%d]\\n&quot;, tmp1);             break;         case Instr_Swap:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1);             push(&cpu, tmp2);             break;         case Instr_Dup:             tmp1 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1);             push(&cpu, tmp1);             break;         case Instr_Over:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp2);             push(&cpu, tmp1);             push(&cpu, tmp2);             break;         case Instr_Inc:             tmp1 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1+1);             break;         case Instr_Add:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1 + tmp2);             break;         case Instr_Sub:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1 - tmp2);             break;         case Instr_Mod:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             if (tmp2 == 0) {                 cpu.state = Cpu_Break;                 break;             }             push(&cpu, tmp1 % tmp2);             break;         case Instr_Mul:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1 * tmp2);             break;         case Instr_Rand:             tmp1 = rand();             push(&cpu, tmp1);             break;         case Instr_Dec:             tmp1 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1-1);             break;         case Instr_Drop:             (void)pop(&cpu);             break;             case Instr_JE:             tmp1 = pop(&cpu);             BAIL_ON_ERROR();             if (tmp1 == 0)                 cpu.pc += decoded.immediate;             break;         case Instr_JNE:             tmp1 = pop(&cpu);             BAIL_ON_ERROR();             if (tmp1 != 0)                 cpu.pc += decoded.immediate;             break;         case Instr_Jump:             cpu.pc += decoded.immediate;             break;         case Instr_Break:             cpu.state = Cpu_Break;             break;         default:             assert(&quot;Unreachable&quot; && false);             break;         }         cpu.pc += decoded.length; \/* Advance PC *\/         cpu.steps++;     } <\/pre>\n<\/div>\n<\/div>\n<p>  \u0414\u0432\u0430 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f.<br \/>  1. \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0444\u0430\u0437\u0430 Fetch. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0440\u0438\u0441\u043a \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432, \u0441 \u043d\u0435\u0439 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430. \u042d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0440\u0435\u0448\u0430\u0435\u043c\u0430 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u043c \u0441\u043b\u0435\u0436\u0435\u043d\u0438\u0435\u043c \u0437\u0430 \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u043c \u043a\u044d\u0448\u0435\u043c.<br \/>  2. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0412\u041c, \u0432 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u0412\u041c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u043c\u0435\u044e\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u043e\u043c\u0430\u043d\u0434, \u0444\u0430\u0437\u044b fetch \u0438 decode \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043d\u0438\u0445 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e. <\/p>\n<p>  \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u043e \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e? \u041f\u043e\u0437\u0432\u043e\u043b\u044e \u0441\u0435\u0431\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u043d\u0442\u0440\u0438\u0433\u0443 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0430\u0442\u044c\u0438, \u0433\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u0432. \u0410 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0434\u0430\u043b\u044c\u0448\u0435 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043d\u0430\u0448 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440.<br \/>  \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b, \u0438\u043d\u0442\u0443\u0438\u0446\u0438\u044f \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u043f\u043b\u043e\u0445\u043e\u0439 \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a. \u041e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a \u0431\u0435\u0441\u043f\u0440\u0438\u0441\u0442\u0440\u0430\u0441\u0442\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Intel\u00ae VTune Amplifier XE 2015 Update 4 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u00abGeneral Exploration\u00bb \u0434\u043b\u044f predecoded. \u0412 \u043e\u0431\u0437\u043e\u0440\u043d\u043e\u043c \u043e\u0442\u0447\u0451\u0442\u0435 \u043a\u0440\u0430\u0441\u043d\u044b\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0435, \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u0430\u0441\u043f\u0435\u043a\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/8f5\/56f\/5d4\/8f556f5d42ea4d24ac49b9a25a774091.png\"\/><\/p>\n<p>  \u00abBad speculation\u00bb??? \u041a\u0430\u043a\u043e\u0439-\u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u0435\u043a\u0443\u043b\u044f\u043d\u0442? \u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u00abBranch Mispredict\u00bb \u2014 \u0443\u0436\u0435 \u044f\u0441\u043d\u0435\u0435. \u041a\u0430\u043a\u043e\u0439-\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u0438\u043b\u0438 \u043d\u0435\u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d \u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0438\u0442\u044c \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432 \u043f\u0430\u0440\u0443 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0442\u0430\u043a\u0442\u043e\u0432.<br \/>  \u041d\u043e \u043e\u0442\u043a\u0443\u0434\u0430 \u0432 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430? \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0438\u0436\u0435. \u041a\u043b\u0438\u043a\u0430\u044e \u043d\u0430 \u00abBranch Mispredict\u00bb, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0438\u0434 Bottom-up, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u0435\u043c\u044b\u0439 \u2014 main(). <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/08b\/fdd\/b2d\/08bfddb2d8574c3d8712b7a89fd5a66d.png\"\/><\/p>\n<p>  \u041d\u0434\u0430, \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0439 \u043d\u0435 \u0441\u0442\u0430\u043b\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041a\u043b\u0438\u043a\u0430\u0435\u043c \u043d\u0430 main(), \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0438\u0434 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b (\u0437\u0430\u0431\u043b\u0430\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439). \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0430 \u0432\u0438\u0434\u0430 \u2014 Source \u0438 Assembly, \u0438 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u00abBranch Mispredict\u00bb. \u041f\u0440\u0438\u0437\u043d\u0430\u0442\u044c\u0441\u044f, \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u0434\u043e, \u0445\u043e\u0442\u044c \u044f \u0438 \u0437\u043d\u0430\u043b, \u0433\u0434\u0435 \u0438 \u0447\u0442\u043e \u0438\u0441\u043a\u0430\u0442\u044c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/338\/dd2\/9b6\/338dd29b6d484140a41e5ea9d696044d.png\"\/><\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u0433\u043e\u043b\u0443\u0431\u044b\u043c \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0435\u043d\u044b \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0435\u043c\u0443 \u043a\u043e\u0434\u0430 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e. \u0412\u043e\u0442 \u044d\u0442\u043e \u0434\u0430 \u2014 \u043d\u0430\u0448 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 switch \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0435\u043c\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u00abjmpq 0x400f20(,%rdx,8)\u00bb \u0438\u043c\u0435\u044e\u0442 \u0441\u0442\u043e\u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u043e (1.000) \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f! \u041a\u0430\u043a \u0442\u0430\u043a? \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u2014 \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u0445 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u044b \u043f\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044e \u0442\u0430\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 (branch target predictor) \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0443\u0434\u0430 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 jmp, \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 <i>\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0435<\/i> \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0430\u0434\u0440\u0435\u0441 \u0441\u0430\u043c\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0441 \u043d\u0435\u0451. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u2014 \u044d\u0442\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434 \u0433\u043e\u0441\u0442\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0412\u041c. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f Primes \u043e\u043d\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0445\u0430\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u2014 \u043f\u043e\u0441\u043b\u0435 push \u043c\u043e\u0436\u0435\u0442 \u0438\u0434\u0442\u0438 \u043a\u0430\u043a \u0435\u0449\u0451 \u043e\u0434\u0438\u043d push, \u0442\u0430\u043a \u0438 over, \u043f\u043e\u0441\u043b\u0435 over \u043c\u043e\u0433\u0443\u0442 \u0438\u0434\u0442\u0438 over, sub, swap; \u0447\u0438\u0441\u043b\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0432\u0435\u043b\u0438\u043a\u043e \u0438 \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u0442.\u0434.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0423\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\u041e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f <i>\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432<\/i> \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0430 <a href=\"http:\/\/stackoverflow.com\/questions\/11227809\/why-is-processing-a-sorted-array-faster-than-an-unsorted-array\">Stackoverflow<\/a>: \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 \u043d\u0451\u043c.  <\/div>\n<\/div>\n<p>  \u041f\u0435\u043d\u0430\u043b\u044c\u0442\u0438 \u043e\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0442\u0435\u043c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u0435\u0435, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0438\u0441\u043b\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432 \u0412\u041c \u2014 \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u044f \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043e\u0442 \u0438\u0434\u0435\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/esolangs.org\/wiki\/BF\">BF<\/a>-\u043c\u0430\u0448\u0438\u043d\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0434\u043e\u043f\u044b\u0442\u043d\u043e\u0439: \u0432\u0441\u0435\u0433\u043e 8 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043c\u043e\u0433\u043b\u0438 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u043c\u0438.<\/p>\n<h3>\u0428\u0438\u0442\u044b\u0439 (threaded)<\/h3>\n<p>  <\/p>\n<blockquote><p>\u00ab\u0421\u0415\u041f\u0423\u041b\u042c\u041a\u0418 \u2014 \u0432\u0430\u0436\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0446\u0438\u0432\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u0440\u0434\u0440\u0438\u0442\u043e\u0432 \u0441 \u043f\u043b\u0430\u043d\u0435\u0442\u044b \u042d\u043d\u0442\u0435\u0440\u043e\u043f\u0438\u044f. \u0421\u043c. \u0421\u0415\u041f\u0423\u041b\u042c\u041a\u0410\u0420\u0418\u0418\u00bb.<br \/>  \u042f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b \u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0432\u0435\u0442\u0443 \u0438 \u043f\u0440\u043e\u0447\u0451\u043b:<br \/>  \u00ab\u0421\u0415\u041f\u0423\u041b\u042c\u041a\u0410\u0420\u0418\u0418 \u2014 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0441\u0435\u043f\u0443\u043b\u0435\u043d\u0438\u044f\u00bb.<br \/>  \u042f \u043f\u043e\u0438\u0441\u043a\u0430\u043b \u00ab\u0421\u0435\u043f\u0443\u043b\u0435\u043d\u0438\u0435\u00bb; \u0442\u0430\u043c \u0437\u043d\u0430\u0447\u0438\u043b\u043e\u0441\u044c:<br \/>  \u00ab\u0421\u0415\u041f\u0423\u041b\u0415\u041d\u0418\u0415 \u2014 \u0437\u0430\u043d\u044f\u0442\u0438\u0435 \u0430\u0440\u0434\u0440\u0438\u0442\u043e\u0432 \u0441 \u043f\u043b\u0430\u043d\u0435\u0442\u044b \u042d\u043d\u0442\u0435\u0440\u043e\u043f\u0438\u044f. \u0421\u043c. \u0421\u0415\u041f\u0423\u041b\u042c\u041a\u0418\u00bb.<\/p>\n<p>  \u0421\u0442\u0430\u043d\u0438\u0441\u043b\u0430\u0432 \u041b\u0435\u043c. \u00ab\u0417\u0432\u0451\u0437\u0434\u043d\u044b\u0435 \u0434\u043d\u0435\u0432\u043d\u0438\u043a\u0438 \u0418\u0439\u043e\u043d\u0430 \u0422\u0438\u0445\u043e\u0433\u043e. \u041f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0435 \u0447\u0435\u0442\u044b\u0440\u043d\u0430\u0434\u0446\u0430\u0442\u043e\u0435.\u00bb<\/p><\/blockquote>\n<p>  \u0421 \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u043d\u0438\u0437\u043a\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c. \u041d\u0430\u0447\u043d\u0451\u043c \u0435\u0451 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b \u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0432 \u0434\u0435\u0442\u0430\u043b\u044f\u0445. \u0417\u0430 \u043d\u0435\u0438\u043c\u0435\u043d\u0438\u0435\u043c (\u0438\u043b\u0438 \u043d\u0435\u0436\u0435\u043b\u0430\u043d\u0438\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a) \u0434\u0435\u0442\u0430\u043b\u044f\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043e\u0431\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0430\u0434\u0440\u0435\u0441 \u0441\u0430\u043c\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0446\u0438\u0438 \u0441 \u043d\u0435\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432. \u0412\u043e\u0442 \u0431\u044b \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u00ab\u0440\u0430\u0437\u043c\u0430\u0437\u0430\u0442\u044c\u00bb \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 jmp \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043c\u0435\u0441\u0442\u0430\u043c; \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u0438\u0437 \u043d\u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441\u0432\u043e\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0434\u0435\u044f\u0442\u044c\u0441\u044f, \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u0435\u0435 \u0445\u0430\u043e\u0442\u0438\u0447\u043d\u043e\u0439 \u0434\u043b\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0439.<br \/>  \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 threaded.c \u0438 threaded-cached.c (\u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435). <br \/>  \u0421\u0443\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f: \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0431\u0449\u0443\u044e \u0442\u043e\u0447\u043a\u0443 (switch), \u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438.<br \/>  \u041f\u043b\u043e\u0445\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c \u21161 \u2014 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043f\u043e \u043c\u0435\u0442\u043a\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 goto. \u0414\u0430, \u0434\u0430, \u0437\u043d\u0430\u044e, goto \u044d\u0442\u043e \u043f\u043b\u043e\u0445\u043e, \u043c\u043a\u0435\u0439, \u044f \u0438 \u0441\u0430\u043c <a href=\"http:\/\/habrahabr.ru\/company\/intel\/blog\/206030\/\">\u043f\u0438\u0441\u0430\u043b<\/a> \u043e\u0431 \u044d\u0442\u043e\u043c. \u0420\u0430\u0434\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u2014 \u0432\u043e \u0432\u0441\u0435 \u0442\u044f\u0436\u043a\u0438\u0435. \u0412 \u043a\u043e\u0434\u0435 \u0412\u041c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u0440\u044f\u0442\u0430\u043d\u043e \u0432 \u043c\u0430\u043a\u0440\u043ec\u0435 DISPATCH:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 DISPATCH<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> #define DISPATCH() do {\\     goto *service_routines[decoded.opcode];   \\    } while(0); <\/pre>\n<\/div>\n<\/div>\n<p>  \u041f\u043b\u043e\u0445\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c \u21162: \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 (\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 \u0421\u0438) \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u044f\u0437\u044b\u043a\u0430 GCC \u2014 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u0437\u044f\u0442\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u043c\u0435\u0442\u043a\u0438 &#038;&#038;:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043c\u0435\u0442\u043e\u043a service_routines:<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> const void* service_routines[] = {     &&sr_Break, &&sr_Nop, &&sr_Halt, &&sr_Push, &&sr_Print,     &&sr_Jne, &&sr_Swap, &&sr_Dup, &&sr_Je, &&sr_Inc,     &&sr_Add, &&sr_Sub, &&sr_Mul, &&sr_Rand, &&sr_Dec,     &&sr_Drop, &&sr_Over, &&sr_Mod, &&sr_Jump, NULL }; <\/pre>\n<\/div>\n<\/div>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430\u043c\u0438 GCC \u0438 ICC \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u0430 \u0421\u0438 (\u043d\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043d\u0435 \u0434\u043b\u044f C++). <br \/>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u00ab\u0446\u0438\u043a\u043b\u00bb (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438) \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 main() \u0438\u0437 threaded-cached.c<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre>     decode_t decoded = {0};     DISPATCH();     do {         sr_Nop:             \/* Do nothing *\/             ADVANCE_PC();             DISPATCH();         sr_Halt:             cpu.state = Cpu_Halted;             ADVANCE_PC();             \/* No need to dispatch after Halt *\/         sr_Push:             push(&cpu, decoded.immediate);             ADVANCE_PC();             DISPATCH();         sr_Print:             tmp1 = pop(&cpu); BAIL_ON_ERROR();             printf(&quot;[%d]\\n&quot;, tmp1);             ADVANCE_PC();             DISPATCH();         sr_Swap:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1);             push(&cpu, tmp2);             ADVANCE_PC();             DISPATCH();         sr_Dup:             tmp1 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1);             push(&cpu, tmp1);             ADVANCE_PC();             DISPATCH();         sr_Over:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp2);             push(&cpu, tmp1);             push(&cpu, tmp2);             ADVANCE_PC();                          DISPATCH();         sr_Inc:             tmp1 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1+1);             ADVANCE_PC();             DISPATCH();         sr_Add:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1 + tmp2);             ADVANCE_PC();             DISPATCH();         sr_Sub:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1 - tmp2);             ADVANCE_PC();             DISPATCH();         sr_Mod:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             if (tmp2 == 0) {                 cpu.state = Cpu_Break;                 break;             }             push(&cpu, tmp1 % tmp2);             ADVANCE_PC();             DISPATCH();         sr_Mul:             tmp1 = pop(&cpu);             tmp2 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1 * tmp2);             ADVANCE_PC();             DISPATCH();         sr_Rand:             tmp1 = rand();             push(&cpu, tmp1);             ADVANCE_PC();             DISPATCH();         sr_Dec:             tmp1 = pop(&cpu);             BAIL_ON_ERROR();             push(&cpu, tmp1-1);             ADVANCE_PC();             DISPATCH();         sr_Drop:             (void)pop(&cpu);             ADVANCE_PC();             DISPATCH();         sr_Je:             tmp1 = pop(&cpu);             BAIL_ON_ERROR();             if (tmp1 == 0)                 cpu.pc += decoded.immediate;             ADVANCE_PC();             DISPATCH();         sr_Jne:             tmp1 = pop(&cpu);             BAIL_ON_ERROR();             if (tmp1 != 0)                 cpu.pc += decoded.immediate;             ADVANCE_PC();             DISPATCH();         sr_Jump:             cpu.pc += decoded.immediate;             ADVANCE_PC();             DISPATCH();         sr_Break:             cpu.state = Cpu_Break;             ADVANCE_PC();             \/* No need to dispatch after Break *\/     } while(cpu.state == Cpu_Running); <\/pre>\n<\/div>\n<\/div>\n<p>  \u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e DISPATCH \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u043a \u0447\u0435\u0445\u0430\u0440\u0434\u0430 \u043f\u0440\u044b\u0436\u043a\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\u043c\u0438. \u0427\u0438\u0441\u043b\u043e \u0445\u043e\u0437\u044f\u0439\u0441\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0432 \u043a\u043e\u0434\u0435 \u0432\u044b\u0440\u043e\u0441\u043b\u043e, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0445 \u043d\u0438\u0445 \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u043c\u0435\u0435\u0442 \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0434\u043b\u044f \u043f\u0430\u0440\u044b \u0433\u043e\u0441\u0442\u0435\u0432\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0430\u0434\u0430\u0435\u0442 (\u0432 [4] \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0441 100% \u0434\u043e 50%).<\/p>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/\u0428\u0438\u0442\u044b\u0439_\u043a\u043e\u0434\"><i>\u0448\u0438\u0442\u044b\u0439<\/i> \u043a\u043e\u0434<\/a>, \u043f\u043e-\u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438 \u2014 threaded code; \u0443\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0442\u0435\u0440\u043c\u0438\u043d \u00abthread \u2014 \u043f\u043e\u0442\u043e\u043a\u00bb \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0437\u0436\u0435 \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u0442\u0435\u043c\u0435.<br \/>  \u0414\u0430\u043d\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0432 \u043d\u0430\u0448\u0435 \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u041f\u0440\u043e\u0446\u0438\u0442\u0438\u0440\u0443\u044e \u043f\u043e\u0441\u0442 Utter_step <a href=\"http:\/\/habrahabr.ru\/post\/261575\/\">habrahabr.ru\/post\/261575<\/a> \u043e\u0442 1 \u0438\u044e\u043b\u044f \u0441\u0435\u0433\u043e \u0433\u043e\u0434\u0430:  <\/p>\n<blockquote><p>Vamsi Parasa \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 Intel \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u043f\u0430\u0442\u0447 &lt;&#8230;&gt;, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0449\u0438\u0439 \u0431\u043b\u043e\u043a switch, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 Python-\u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430, \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 computed goto, \u043a\u0430\u043a \u044d\u0442\u043e \u0443\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 Python 3. \u041a\u0430\u043a <a href=\"http:\/\/eli.thegreenplace.net\/2012\/07\/12\/computed-goto-for-efficient-dispatch-tables\">\u043e\u0431\u044a\u044f\u0441\u043d\u044f\u043b<\/a> Eli Bendersky, \u0432 \u0442\u0430\u043a\u043e\u043c \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u043c switch-\u0431\u043b\u043e\u043a\u0435, \u043a\u0430\u043a \u0432 \u0431\u043b\u043e\u043a\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 \u0432 CPython (\u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u043c \u0438\u0437 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c 2000(!) \u0441\u0442\u0440\u043e\u043a), \u044d\u0442\u043e \u0434\u0430\u0451\u0442 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 15-20%. \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0434\u0432\u0443\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c: computed goto, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 switch-case, \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 switch \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 C99, \u0438, \u0447\u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u043e, CPU \u043c\u043e\u0436\u0435\u0442 \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0442\u0430\u043a\u0438\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 &lt;&#8230;&gt;<\/p><\/blockquote>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u043e\u0433\u043e \u0438\u0437 threaded.c \u0441 \u0444\u043b\u0430\u0433\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 threaded-notune), \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043d\u0430 10%\u201320% \u043d\u0438\u0436\u0435 switched. \u0410\u043d\u0430\u043b\u0438\u0437 \u0432 VTune \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0442\u043e\u0440\u043c\u043e\u0437\u043e\u0432 \u0432\u0441\u0451 \u0442\u0430 \u0436\u0435 \u2014 100% Branch Mispredict \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 DISPATCH:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/ff4\/15c\/789\/ff415c789e75430787770bcfb96c3b05.png\"\/><\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0447\u0442\u043e-\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0442\u0430\u043a \u2014 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 DISPATCH \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, VTune \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0434\u043b\u044f \u043d\u0438\u0445 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e objdump \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0430 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u044f \u2014 \u0432\u043e \u0432\u0441\u0451\u043c \u0442\u0435\u043b\u0435 main() \u0431\u044b\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b:  <\/p>\n<pre> $ objdump -d threaded-notune| grep 'jmpq\\s*\\*%rdx'   4006c8:       ff e2                   jmpq   *%rdx   400ae7:       ff e2                   jmpq   *%rdx <\/pre>\n<p>  (\u0412\u0442\u043e\u0440\u043e\u0439 jmpq \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 400ae7 \u2014 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 register_tm_clones, \u2014 \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0434\u0435\u043b\u0443). \u0427\u0442\u043e \u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u2014 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 GCC \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u0441\u043b\u0443\u0436\u043b\u0438\u0432\u043e \u0441\u0445\u043b\u043e\u043f\u043d\u0443\u043b \u0432\u0441\u0435 DISPATCH \u0432 \u043e\u0434\u0438\u043d, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0432 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440!<\/p>\n<h5>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u2014 \u0437\u0430\u043a\u043b\u044f\u0442\u044b\u0439 \u0434\u0440\u0443\u0433<\/h5>\n<p>  \u0422\u0443\u0442 \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u043c\u043e\u044f \u0431\u043e\u0440\u044c\u0431\u0430 \u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c. \u042f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c GCC \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0441 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c\u0438 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u043c\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b.  <\/p>\n<ul>\n<li> \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u0440\u0430\u0437\u043d\u044b\u0435 \u0443\u0440\u043e\u0432\u043d\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 -Og, \u0443\u0440\u043e\u0432\u043d\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u0441 -O1 \u043f\u043e -O3 \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u043b\u0438 DISPATCH.<\/li>\n<li> \u041f\u044b\u0442\u0430\u043b\u0441\u044f \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c goto \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u0443\u044e \u0432\u0441\u0442\u0430\u0432\u043a\u0443 \u0438 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0441\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u043e\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0441\u0430\u043c \u0444\u0430\u043a\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043f\u043e \u043c\u0435\u0442\u043a\u0435:<br \/> \n<pre> #define DISPATCH() \\ __asm__ __volatile__(&quot;mov    (%0, %1, 8), %%rcx\\n&quot; \\                      &quot;jmpq   *%%rcx\\n&quot; \\                      :: &quot;r&quot;(&service_routines), &quot;r&quot;((uint64_t)decoded.opcode): &quot;%rcx&quot;); <\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u043b \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0431\u043b\u043e\u043a\u0438 \u043a\u043e\u0434\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u0435 \u043c\u0435\u0442\u043a\u0438 (sr_Add, sr_Nop \u0438 \u0442.\u0434.) \u0441\u0442\u0430\u043b\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u043c\u0435\u0441\u0442\u043e, \u0438 \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 service_routines \u0441\u0442\u0430\u043b\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/li>\n<li>\u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 service_routines \u0438\u0437-\u043f\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0435 \u0441\u043c\u043e\u0433 \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043c\u0435\u0442\u043a\u0438: \u0441\u0434\u0435\u043b\u0430\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0438 \u043b\u0438\u0448\u044c \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u043b \u043c\u0430\u0441\u0441\u0438\u0432. \u0418\u0433\u0440\u044b \u0441 <a href=\"http:\/\/habrahabr.ru\/post\/229963\/\">\u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c<\/a> \u043d\u0435 \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u043e. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 GCC \u0437\u0430\u043a\u043e\u043d\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e DISPATCH \u043d\u0435\u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u044b\u043c \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0434\u0430\u043b\u0438\u043b \u0435\u0433\u043e!<\/li>\n<\/ul>\n<blockquote><p>\u0415\u0441\u043b\u0438 \u043d\u0438\u0447\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u043f\u0440\u043e\u0447\u0442\u0438\u0442\u0435, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e.<br \/>  \u0410\u043a\u0441\u0438\u043e\u043c\u0430 \u041a\u0430\u043d\u0430<\/p><\/blockquote>\n<p>  \u0418\u0442\u0430\u043a, \u0433\u0440\u0443\u0431\u0430\u044f \u0441\u0438\u043b\u0430 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u0430. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0435\u0448\u0430\u0435\u0442 \u043c\u043e\u0435\u043c\u0443 \u0437\u0430\u043c\u044b\u0441\u043b\u0443. \u041d\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u044d\u043a\u0440\u0430\u043d\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 <a href=\"https:\/\/gcc.gnu.org\/onlinedocs\/gcc\/Optimize-Options.html\">\u043e\u043f\u0446\u0438\u0439<\/a> \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u044f \u0443\u0432\u0438\u0434\u0435\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:  <\/p>\n<blockquote><p>Please note the warning under -fgcse about invoking -O2 on programs that use <b>computed gotos<\/b>. <br \/>  &lt;&#8230;&gt;<br \/>  Note: When compiling a program using computed gotos, a GCC extension, <b>you may get better run-time performance if you disable the global common subexpression elimination<\/b> pass by adding -fno-gcse to the command line.<\/p><\/blockquote>\n<p>  \u041f\u043e\u043f\u0430\u043b\u0430\u0441\u044c! \u042d\u0442\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f -fgcse \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u043b\u0430 \u043a\u043e\u0434 threaded \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0435 \u0441\u043f\u0430\u0433\u0435\u0442\u0442\u0438. \u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435, \u0441\u043c. \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/blogs.oracle.com\/nike\/entry\/fast_interpreter_using_gcc_s#comment-1189140309000\">\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439<\/a> \u043a \u043f\u043e\u0441\u0442\u0443 \u00abFast interpreter using gcc&#8217;s computed goto\u00bb:  <\/p>\n<blockquote><p>I have the same problem as Philip. With G++ the compiler seems to go though incredible contortions to preserve a single indirect jump. Even going so far as to combine jumps from separate jump tables \u2014 with a series of direct jumps. This seems utterly bewildering behaviour as it specially breaks the performance gain having a jmp \\*%eax for each interpreter leg.<\/p><\/blockquote>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u0441 -fno-gcse \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u0441\u0442\u0430\u043b \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0438\u0441\u043a \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0432 threaded c \u043f\u043e\u043c\u043e\u0449\u044c\u044e objdump<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> $ objdump -d threaded| grep 'jmpq\\s*\\*%rdx'   4006c8:       ff e2                   jmpq   *%rdx   40070d:       ff e2                   jmpq   *%rdx   40084e:       ff e2                   jmpq   *%rdx   4008bd:       ff e2                   jmpq   *%rdx   40093d:       ff e2                   jmpq   *%rdx   4009b1:       ff e2                   jmpq   *%rdx   400a3b:       ff e2                   jmpq   *%rdx   400aa2:       ff e2                   jmpq   *%rdx   400b15:       ff e2                   jmpq   *%rdx   400b89:       ff e2                   jmpq   *%rdx   400c0b:       ff e2                   jmpq   *%rdx   400c80:       ff e2                   jmpq   *%rdx   400cd8:       ff e2                   jmpq   *%rdx   400d3f:       ff e2                   jmpq   *%rdx   400d90:       ff e2                   jmpq   *%rdx   400dea:       ff e2                   jmpq   *%rdx   400e44:       ff e2                   jmpq   *%rdx   400e8c:       ff e2                   jmpq   *%rdx   400f97:       ff e2                   jmpq   *%rdx <\/pre>\n<\/div>\n<\/div>\n<p>  \u0415\u0449\u0451 \u0440\u0430\u0437 \u043e \u0442\u043e\u043c, \u0437\u0430 \u0441\u0447\u0451\u0442 \u0447\u0435\u0433\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u043c\u044b \u0440\u0430\u0437\u0432\u044f\u0437\u0430\u043b\u0438 \u043e\u0434\u0438\u043d \u0443\u0437\u0435\u043b \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0445 \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0435\u0433\u043e \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043b\u043a\u0438\u0435 \u0443\u0437\u043b\u044b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u043f\u0430\u0440\u0430\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u044d\u0442\u0443 \u0438\u0434\u0435\u044e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0442\u044c \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u2014 \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0440\u043e\u0435\u043a, \u0447\u0435\u0442\u0432\u0451\u0440\u043e\u043a \u0438 \u0442.\u0434. \u0437\u0430 \u0441\u0447\u0451\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u00ab\u0440\u0430\u0437\u0431\u0443\u0445\u0430\u043d\u0438\u044f\u00bb \u043a\u043e\u0434\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043c\u0435\u0442\u044c \u043f\u043e \u0434\u0432\u0435 \u043a\u043e\u043f\u0438\u0438 \u0432\u0441\u0435\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440, \u0438 \u0432\u043d\u0443\u0442\u0440\u0438 DISPATCH \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u0438\u0437 \u043d\u0438\u0445, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u0434\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438 \u0435\u0451 \u0430\u0434\u0440\u0435\u0441\u0430, \u0438\u043b\u0438 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u044d\u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0432\u0448\u0438\u043c\u0441\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c threaded \u0441\u0442\u0430\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0448\u0435. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u2014 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438. \u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0442\u0438\u043f\u0443 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430.<\/p>\n<h3>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0439 (subroutined)<\/h3>\n<p>  \u041d\u043e \u0447\u0442\u043e \u044d\u0442\u043e \u044f \u0432\u0441\u0451 \u043f\u0440\u043e goto \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0433\u0430\u0434\u043e\u0441\u0442\u0438. \u041f\u043e\u0440\u0430 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0440\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u043e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u2014 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c (\u0444\u0430\u0439\u043b subroutined.c). \u041e\u0444\u043e\u0440\u043c\u0438\u043c \u043a\u043e\u0434 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0432 \u0432\u0438\u0434\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0438\u043f\u0430 service_routine_t:  <\/p>\n<pre> typedef void (*service_routine_t)(cpu_t *pcpu, decode_t* pdecode); <\/pre>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b:  <\/p>\n<pre> void sr_Dec(cpu_t *pcpu, decode_t *pdecoded) {     uint32_t tmp1 = pop(pcpu);     BAIL_ON_ERROR();     push(pcpu, tmp1-1); } <\/pre>\n<p>  \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 service_routines[] \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u0437\u044f\u0442\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u0430\u0441\u0441\u0438\u0432 service_routines<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> service_routine_t service_routines[] = {         &sr_Break, &sr_Nop, &sr_Halt, &sr_Push, &sr_Print,         &sr_Jne, &sr_Swap, &sr_Dup, &sr_Je, &sr_Inc,         &sr_Add, &sr_Sub, &sr_Mul, &sr_Rand, &sr_Dec,         &sr_Drop, &sr_Over, &sr_Mod, &sr_Jump     }; <\/pre>\n<\/div>\n<\/div>\n<p>  \u0421\u0430\u043c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0435\u0433\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u043e\u043f\u043a\u043e\u0434\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">main() \u0434\u043b\u044f subroutined<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre>     while (cpu.state == Cpu_Running && cpu.steps &lt; steplimit) {         decode_t decoded = fetch_decode(&cpu);         if (cpu.state != Cpu_Running) break;         service_routines[decoded.opcode](&cpu, &decoded); \/* Call the SR *\/         cpu.pc += decoded.length; \/* Advance PC *\/         cpu.steps++;     } <\/pre>\n<\/div>\n<\/div>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0430\u043d\u0430\u043b\u0438\u0437 \u0432 VTune \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u044e \u0442\u0443 \u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u2014 \u043f\u043b\u043e\u0445\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/53c\/9c8\/bb5\/53c9c8bb523445399715411f6e7a47bf.png\"\/><\/p>\n<p>  \u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 subroutined \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 switched. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u044d\u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f. \u041c\u044b \u0436\u0435 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 subroutined \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0448\u0438\u0442\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u00ab\u0442\u043e\u0442, \u043a\u0442\u043e \u043d\u0430\u043c \u043c\u0435\u0448\u0430\u0435\u0442 \u2014 \u0442\u043e\u0442 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442!\u00bb. \u042f \u0433\u043e\u0432\u043e\u0440\u044e \u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435.<\/p>\n<h3>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0439 \u0441 \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u043e\u0439 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0435\u0439 (tailrecursive)<\/h3>\n<p>  <\/p>\n<blockquote><p>\u041d\u043e\u0433\u0438, \u043a\u0440\u044b\u043b\u044c\u044f\u2026 \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 <a href=\"http:\/\/www.youtube.com\/watch?v=j0-3RoWEElc\">\u0445\u0432\u043e\u0441\u0442<\/a>!<\/p><\/blockquote>\n<p>  \u041f\u0440\u043e\u0448\u0443 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u0434 \u0444\u0430\u0439\u043b\u0430 tailrecursive.c. \u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 subroutined.c \u0432 \u043d\u0451\u043c \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<br \/>  \u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432\u043e\u043c fetch_decode() \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0437\u0430 \u043d\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c DISPATCH():  <\/p>\n<pre> void sr_Dec(cpu_t *pcpu, decode_t *pdecoded) {     uint32_t tmp1 = pop(pcpu);     BAIL_ON_ERROR();     push(pcpu, tmp1-1);     ADVANCE_PC();     *pdecoded = fetch_decode(pcpu);     DISPATCH(); } <\/pre>\n<p>  \u041a\u043e\u0434 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 DISPATCH:  <\/p>\n<pre> #define DISPATCH() service_routines[pdecoded-&gt;opcode](pcpu, pdecoded); <\/pre>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443, \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e, \u0438 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f. \u041a\u043e\u0434 main(), \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0446\u0438\u043a\u043b \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u043e:  <\/p>\n<pre> decode_t decoded = fetch_decode(&cpu); service_routines[decoded.opcode](&cpu, &decoded); <\/pre>\n<p>  \u0418 \u0432\u0441\u0451. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u041e\u043d\u0430 \u0436\u0435, \u043a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438, \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0442\u0430 \u2014 \u0434\u043b\u044f \u0442\u0440\u0435\u0442\u044c\u0435\u0439\u2026<br \/>  \u041d\u043e \u043f\u043e\u0441\u0442\u043e\u0439\u0442\u0435, \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c?! \u0412\u0435\u0434\u044c, \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u044f\u0441\u044c \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0440\u0430\u0441\u0442\u0443\u0449\u0438\u0439 \u0441\u0442\u0435\u043a \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043c\u0438\u0433 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f, \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0443\u043f\u0430\u0434\u0451\u0442. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442.<br \/>  \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u0434 \u0441\u0430\u043c\u044b\u043c \u0432\u044b\u0445\u043e\u0434\u043e\u043c \u0438\u0437 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u2014 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 <i>\u0445\u0432\u043e\u0441\u0442\u043e\u0432\u043e\u0439 \u0432\u044b\u0437\u043e\u0432<\/i>. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0434\u043b\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u2014 \u043e\u043d\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043c\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0437\u0430\u043c\u0435\u043d\u0438\u0442 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 call \u043d\u0430 jmp, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0442\u0435\u043a \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043d\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f.<br \/>  \u0412 GCC \u0437\u0430 \u0442\u0430\u043a\u0443\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0444\u043b\u0430\u0433 -foptimize-sibling-calls (\u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0439, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 -O1). \u0415\u0441\u043b\u0438 \u0435\u0451 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c (\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 tailrecursive-noopt), \u0442\u043e \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0430\u0434\u0430\u0435\u0442. \u0423 \u043c\u0435\u043d\u044f \u043e\u043d\u0430 \u043d\u0435 \u0434\u043e\u0431\u0435\u0436\u0430\u043b\u0430 \u0434\u043e 90000 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438:  <\/p>\n<pre> $ .\/tailrecursive-noopt 90000 &gt; \/dev\/null  Segmentation fault (core dumped) <\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437 tailrecursive \u0432 VTune \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0432\u0435\u0440\u0445\u043d\u0438\u0435 \u043c\u0435\u0441\u0442\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u00ab\u0433\u043e\u0440\u044f\u0447\u0435\u0433\u043e\u00bb \u043a\u043e\u0434\u0430 \u0437\u0430\u043d\u044f\u043b\u0438 fetch(_decode) \u0438 decode:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/bc5\/9eb\/287\/bc59eb287c664d0eadb837769965598c.png\"\/><\/p>\n<p>  \u0412\u0438\u0434\u0438\u043c\u043e, \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f (\u0438\u0437\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442) \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 call \u043d\u0430 jmpq. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 sr_Swap(), \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e Branch Mispredict:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/868\/ce8\/b4c\/868ce8b4cea44a5ea836aad93679b6d4.png\"\/><\/p>\n<h3>\u0420\u0443\u0434\u0438\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u044b\u0439 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440 (binary translation)<\/h3>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0445 \u043e\u0442\u0432\u0430\u0436\u043d\u044b\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439, \u0447\u0442\u043e \u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430, \u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0412\u041c (\u0444\u0430\u0439\u043b translated.c). \u0424\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043a\u043b\u0430\u0441\u0441\u0443 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u0432: \u0432 \u043d\u0435\u0439 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 (\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f). \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, translated \u043d\u0435\u0434\u0430\u043b\u0435\u043a\u043e \u0443\u0448\u043b\u0430 \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u0432. \u0422\u0430\u043a, \u0432 \u043d\u0435\u0439 \u0442\u043e\u0436\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u0430\u0437\u0430 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u043a\u0430\u043a \u0438 \u0432 \u0448\u0438\u0442\u043e\u043c \u043a\u043e\u0434\u0435, \u043f\u0440\u044b\u0433\u0430\u0435\u0442 \u043e\u0442 \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043a \u0434\u0440\u0443\u0433\u043e\u0439.<\/p>\n<p>  \u0415\u0441\u0442\u044c \u0438 \u0432\u0430\u0436\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435. \u0412\u0435\u0441\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0435\u0435 \u043a\u043e\u0434 \u2014 \u044d\u0442\u043e \u0421\u0438, \u0438 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 POSIX-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435.   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0430 \u0447\u0451\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\u041d\u0443, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u0441 \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0440\u0430\u0432\u043a\u0430\u043c\u0438 \u043f\u043e\u0434 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0435\u0433\u043e \u0432\u0441\u0435\u0433\u043e \u043d\u0430 \u0434\u0432\u0443\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445: Ubuntu 12.04 \u0438 Windows 8.1 (Cygwin). \u0412\u0441\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442. \u0410 \u0432\u043e\u0442 translated \u043f\u043e\u0434 Cygwin \u043c\u043d\u0435 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u2014 \u0432\u044b\u0437\u043e\u0432 mprotect() \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u00abInvalid argument\u00bb.<\/div>\n<\/div>\n<p>  translated \u0436\u0435 \u044f\u0432\u043d\u043e \u0437\u0430\u0432\u044f\u0437\u0430\u043d \u043d\u0430 \u0445\u043e\u0437\u044f\u0439\u0441\u043a\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 Intel 64 (x86_64, AMD64, <a href=\"http:\/\/habrahabr.ru\/company\/intel\/blog\/201462\/\">x64&#8230;<\/a>), \u0438 \u043d\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439. \u041f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 translate_program() \u0438 \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0441\u0442.<\/p>\n<p>  \u042d\u0442\u043e\u0442 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440 \u00ab\u0440\u0443\u0434\u0438\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u044b\u0439\u00bb, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0433\u043e \u0430\u0432\u0442\u043e\u0440 \u043f\u043e\u043b\u0435\u043d\u0438\u043b\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u043f\u0441\u0443\u043b\u044b \u043f\u043e-\u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438. \u041e\u043d \u0441\u043b\u0443\u0436\u0438\u0442 \u043b\u0438\u0448\u044c \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u0446\u0435\u043b\u044f\u043c. \u042f \u043e\u043f\u0438\u0441\u0430\u043b \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0432 \u044d\u0442\u043e\u0439 <a href=\"http:\/\/habrahabr.ru\/company\/intel\/blog\/254027\/\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a>.<\/p>\n<p>  \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0441\u0430\u043c\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> #ifndef __x86_64__ \/* The program generates machine code, only specific platforms are supported *\/ #error This program is designed to compile only on Intel64\/AMD64 platform. #error Sorry. #endif <\/pre>\n<\/div>\n<\/div>\n<p>  \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0441\u043a\u0430\u0437\u0430\u043b, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Intel 64. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0432\u044b\u0434\u0430\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u0435\u0449\u0451 \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u0431\u0438\u0432\u0430\u0435\u043c \u0433\u0432\u043e\u0437\u0434\u044f\u043c\u0438 pcpu \u043a R15<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> \/* Global pointer to be accessible from generated code.    Uses GNU extension to statically occupy host R15 register. *\/ register cpu_t * pcpu asm(&quot;r15&quot;); <\/pre>\n<\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0430\u043c\u043e\u0439 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 cpu_t, \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0445\u043e\u0437\u044f\u0439\u0441\u043a\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 R15. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 <a href=\"https:\/\/gcc.gnu.org\/onlinedocs\/gcc\/Global-Reg-Vars.html\">GNU-\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435<\/a>, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u0444\u043b\u0430\u0433\u043e\u043c -std=gnu11 (\u0441\u043c\u043e\u0442\u0440\u0438 Makefile), \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u2014 \u0441 \u0444\u043b\u0430\u0433\u043e\u043c -std=c11.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> char gen_code[JIT_CODE_SIZE] __attribute__ ((section (&quot;.text#&quot;)))                              __attribute__ ((aligned(4096))); <\/pre>\n<\/div>\n<\/div>\n<p>  \u041c\u0430\u0441\u0441\u0438\u0432 gen_code \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0434\u0432\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0430\u0434\u0440\u0435\u0441 \u0435\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e \u0435\u0433\u043e \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 (.text), \u0430 \u043d\u0435 \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (.data), \u0433\u0434\u0435 \u0432\u043e\u043e\u0431\u0449\u0435-\u0442\u043e \u043c\u0435\u0441\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432 \u043d\u0435\u0433\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434, \u043b\u0443\u0447\u0448\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0431\u044b\u043b \u043f\u043e\u0431\u043b\u0438\u0436\u0435 \u043a \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0432 gen_code \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u2014 \u0441\u0435\u043a\u0446\u0438\u044f .text \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u0430 \u043e\u0442 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u0445\u043e\u0434 \u0438 \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> static void enter_generated_code(void* addr) {     __asm__ __volatile__ ( &quot;jmp *%0&quot;::&quot;r&quot;(addr):); }  static void exit_generated_code() {     longjmp(return_buf, 1); } <\/pre>\n<\/div>\n<\/div>\n<p>  \u0412\u0445\u043e\u0434 \u0432 \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043f\u0440\u044b\u0436\u043a\u043e\u043c \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 gen_code. \u0412\u044b\u0445\u043e\u0434 \u0441\u0434\u0435\u043b\u0430\u043d \u0447\u0435\u0440\u0435\u0437 longjmp() \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 \u0421\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c <i>\u043d\u0435\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e goto<\/i> (\u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e goto \u0431\u044b\u043b\u043e \u043c\u0430\u043b\u043e). \u042d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u0440\u044b\u0433\u043d\u0443\u0442\u044c \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u043b\u044e\u0431\u0443\u044e \u0434\u0440\u0443\u0433\u0443\u044e \u0438\u0437 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0432\u044b\u0437\u0432\u0430\u0432\u0448\u0438\u0445 \u0435\u0451, \u0432 \u043c\u0435\u0441\u0442\u043e, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u043e\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e setjmp() c \u0442\u0435\u043c \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 (return_buf).<br \/>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439. exit_generated_code() \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u044e\u0434\u0443 \u0432 \u043a\u043e\u0434\u0435, \u0433\u0434\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f Halted\/Break, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u043d\u0435\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 PC. \u041f\u0440\u0438\u0437\u043d\u0430\u0442\u044c\u0441\u044f, \u044f, \u043f\u043e\u0445\u043e\u0436\u0435, \u0445\u0432\u0430\u0442\u0438\u043b \u043b\u0438\u0448\u043d\u0435\u0433\u043e \u2014 \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430\u043b longjmp \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043a\u043e\u0434\u0443.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> void sr_Drop() {     (void)pop(pcpu);     ADVANCE_PC(1); }  void sr_Je(int32_t immediate) {     uint32_t tmp1 = pop(pcpu);         if (tmp1 == 0)         pcpu-&gt;pc += immediate;     ADVANCE_PC(2);     if (tmp1 == 0) \/* Non-sequential PC change *\/         exit_generated_code(); } <\/pre>\n<\/div>\n<\/div>\n<p>  \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0412\u041c, \u043d\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Drop), \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c pcpu. \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0441 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u043e\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Je) \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0435\u0433\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0435. \u0415\u0441\u043b\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0445, \u0442\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0442\u044c ABI \u0445\u043e\u0437\u044f\u0439\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 System V ABI (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0432 Linux) \u043f\u0435\u0440\u0432\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u2014 \u044d\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440 RDI.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 translate_program()<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> static void translate_program(const Instr_t *prog,                            char *out_code, void **entrypoints, int len) {     assert(prog);     assert(out_code);     assert(entrypoints);          \/* An IA-32 instruction &quot;MOV RDI, imm32&quot; is used to pass a parameter        to a function invoked by a following CALL. *\/ #ifdef __CYGWIN__ \/* Win64 ABI, use RCX instead of RDI *\/     const char mov_template_code[]= {0x48, 0xc7, 0xc1, 0x00, 0x00, 0x00, 0x00}; #else     const char mov_template_code[]= {0x48, 0xc7, 0xc7, 0x00, 0x00, 0x00, 0x00}; #endif     const int mov_template_size = sizeof(mov_template_code);          \/* An IA-32 instruction &quot;CALL rel32&quot; is used as a trampoline to invoke        service routines. A template for it is &quot;call .+0x00000005&quot; *\/     const char call_template_code[] = { 0xe8, 0x00, 0x00, 0x00, 0x00 };     const int call_template_size = sizeof(call_template_code);          int i = 0; \/* Address of current guest instruction *\/     char* cur = out_code; \/* Where to put new code *\/          \/* The program is short, so we can translate it as a whole.        Otherwise, some sort of lazy decoding will be required *\/     while (i &lt; len) {         decode_t decoded = decode_at_address(prog, i);         entrypoints[i] = (void*) cur;                  if (decoded.length == 2) { \/* Guest instruction has an immediate *\/             assert(cur + mov_template_size - out_code &lt; JIT_CODE_SIZE);             memcpy(cur, mov_template_code, mov_template_size);             \/* Patch template with correct immediate value *\/             memcpy(cur + 3, &decoded.immediate, 4);             cur += mov_template_size;         }                  assert(cur + call_template_size - out_code &lt; JIT_CODE_SIZE);         memcpy(cur, call_template_code, call_template_size);         intptr_t offset = (intptr_t)service_routines[decoded.opcode]                             - (intptr_t)cur - call_template_size;         if (offset != (intptr_t)(int32_t)offset) {             fprintf(stderr, &quot;Offset to service routine for opcode %d&quot;             &quot; does not fit in 32 bits. Cannot generate code for it, sorry&quot;,             decoded.opcode);             exit(2);         }         uint32_t offset32 = (uint32_t)offset;         \/* Patch template with correct offset *\/         memcpy(cur + 1, &offset, 4);         i += decoded.length;         cur += call_template_size;     } } <\/pre>\n<\/div>\n<\/div>\n<p>  \u0421\u0430\u043c\u044b\u0439 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044f. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b prog \u0434\u043b\u0438\u043d\u043e\u0439 len \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0434\u0432\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430: out_code \u2014 \u0445\u043e\u0437\u044f\u0439\u0441\u043a\u0438\u043c \u0433\u043e\u0441\u0442\u0435\u0432\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438\u0437 prog, \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 entrypoints \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u0430\u043f\u0441\u0443\u043b \u0432\u043d\u0443\u0442\u0440\u0438 out_code.<br \/>  \u041a\u0430\u0436\u0434\u0430\u044f \u0433\u043e\u0441\u0442\u0435\u0432\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u0443 \u0438\u043b\u0438 \u0434\u0432\u0435 \u0445\u043e\u0437\u044f\u0439\u0441\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u0433\u043e\u0441\u0442\u0435\u0432\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0431\u0435\u0437 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u043e\u0432 \u044d\u0442\u043e \u00abcall rel32\u00bb, \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0441 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u043e\u043c \u2014 \u043f\u0430\u0440\u0430 \u00abmov imm, %rdi; call rel32\u00bb. RDI \u0437\u0434\u0435\u0441\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043e\u0436\u0438\u0434\u0430\u044e\u0442 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u043d\u0451\u043c \u0441\u0432\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442.<br \/>  rel32 \u2014 \u044d\u0442\u043e 32-\u0431\u0438\u0442\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 CALL \u043e\u043d\u043e \u0440\u0430\u0437\u043d\u043e\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f (offset32) \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<br \/>  \u041f\u043e\u0447\u0435\u043c\u0443 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0437\u0434\u0435\u0441\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u0430 \u043d\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0445\u043e\u0437\u044f\u0439\u0441\u043a\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 64-\u0431\u0438\u0442\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 64 \u0431\u0438\u0442 \u0432 CALL \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0431\u044b \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0438 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0440\u0435\u0433\u0438\u0441\u0442\u0440. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e gen_code \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u2014 \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0443\u043c\u0435\u0449\u0430\u043b\u0438\u0441\u044c \u0432 32 \u0431\u0438\u0442\u0430. \u0412\u0435\u0434\u044c \u0441\u0435\u043a\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u043b\u0435\u043a\u043e \u043e\u0442 \u043a\u043e\u0434\u0430.<br \/>  \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u043a\u0430\u043a \u043a\u043e\u0434 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 (mov_template_code \u0438 call_template_code), \u0442\u0430\u043a \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441 \u043d\u0438\u043c\u0438 (\u0432\u044b\u0437\u043e\u0432\u044b memcpy()) \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0445\u043e\u0437\u044f\u0439\u0441\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u041f\u0440\u0438 \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 translated \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438\u0445 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c.<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b Primes, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e GDB \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b translate_program():  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0425\u043e\u0437\u044f\u0439\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f Primes<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre> (gdb) disassemble gen_code, gen_code+4096 Dump of assembler code from 0x403000 to 0x404000:    0x0000000000403000 &lt;gen_code+0&gt;:     mov    $0x186a0,%rdi    0x0000000000403007 &lt;gen_code+7&gt;:     callq  0x4020c0 &lt;sr_Push&gt;    0x000000000040300c &lt;gen_code+12&gt;:    mov    $0x2,%rdi    0x0000000000403013 &lt;gen_code+19&gt;:    callq  0x4020c0 &lt;sr_Push&gt;    0x0000000000403018 &lt;gen_code+24&gt;:    callq  0x4029a0 &lt;sr_Over&gt;    0x000000000040301d &lt;gen_code+29&gt;:    callq  0x4029a0 &lt;sr_Over&gt;    0x0000000000403022 &lt;gen_code+34&gt;:    callq  0x402720 &lt;sr_Sub&gt;    0x0000000000403027 &lt;gen_code+39&gt;:    mov    $0x17,%rdi    0x000000000040302e &lt;gen_code+46&gt;:    callq  0x4021a0 &lt;sr_Je&gt;    0x0000000000403033 &lt;gen_code+51&gt;:    mov    $0x2,%rdi    0x000000000040303a &lt;gen_code+58&gt;:    callq  0x4020c0 &lt;sr_Push&gt;    0x000000000040303f &lt;gen_code+63&gt;:    callq  0x4029a0 &lt;sr_Over&gt;    0x0000000000403044 &lt;gen_code+68&gt;:    callq  0x4029a0 &lt;sr_Over&gt;    0x0000000000403049 &lt;gen_code+73&gt;:    callq  0x4027e0 &lt;sr_Swap&gt;    0x000000000040304e &lt;gen_code+78&gt;:    callq  0x402720 &lt;sr_Sub&gt;    0x0000000000403053 &lt;gen_code+83&gt;:    mov    $0x9,%rdi    0x000000000040305a &lt;gen_code+90&gt;:    callq  0x4021a0 &lt;sr_Je&gt;    0x000000000040305f &lt;gen_code+95&gt;:    callq  0x4029a0 &lt;sr_Over&gt;    0x0000000000403064 &lt;gen_code+100&gt;:   callq  0x4029a0 &lt;sr_Over&gt;    0x0000000000403069 &lt;gen_code+105&gt;:   callq  0x4027e0 &lt;sr_Swap&gt;    0x000000000040306e &lt;gen_code+110&gt;:   callq  0x4028c0 &lt;sr_Mod&gt;    0x0000000000403073 &lt;gen_code+115&gt;:   mov    $0x5,%rdi    0x000000000040307a &lt;gen_code+122&gt;:   callq  0x4021a0 &lt;sr_Je&gt;    0x000000000040307f &lt;gen_code+127&gt;:   callq  0x402300 &lt;sr_Inc&gt;    0x0000000000403084 &lt;gen_code+132&gt;:   mov    $0xfffffffffffffff1,%rdi    0x000000000040308b &lt;gen_code+139&gt;:   callq  0x402080 &lt;sr_Jump&gt;    0x0000000000403090 &lt;gen_code+144&gt;:   callq  0x4029a0 &lt;sr_Over&gt;    0x0000000000403095 &lt;gen_code+149&gt;:   callq  0x402460 &lt;sr_Print&gt;    0x000000000040309a &lt;gen_code+154&gt;:   callq  0x4022a0 &lt;sr_Drop&gt;    0x000000000040309f &lt;gen_code+159&gt;:   callq  0x402300 &lt;sr_Inc&gt;    0x00000000004030a4 &lt;gen_code+164&gt;:   mov    $0xffffffffffffffe4,%rdi    0x00000000004030ab &lt;gen_code+171&gt;:   callq  0x402080 &lt;sr_Jump&gt;    0x00000000004030b0 &lt;gen_code+176&gt;:   callq  0x402060 &lt;sr_Halt&gt;    0x00000000004030b5 &lt;gen_code+181&gt;:   callq  0x4020a0 &lt;sr_Break&gt;    0x00000000004030ba &lt;gen_code+186&gt;:   callq  0x4020a0 &lt;sr_Break&gt;    0x00000000004030bf &lt;gen_code+191&gt;:   callq  0x4020a0 &lt;sr_Break&gt;    0x00000000004030c4 &lt;gen_code+196&gt;:   callq  0x4020a0 &lt;sr_Break&gt;    0x00000000004030c9 &lt;gen_code+201&gt;:   callq  0x4020a0 &lt;sr_Break&gt;    0x00000000004030ce &lt;gen_code+206&gt;:   callq  0x4020a0 &lt;sr_Break&gt; &lt;...&gt; <\/pre>\n<\/div>\n<\/div>\n<p>  \u0415\u0449\u0451 \u0440\u0430\u0437 \u043e\u0442\u043c\u0435\u0447\u0443: \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b translated \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e.<br \/>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u0435\u0437 \u043a\u043e\u043d\u0446\u0430 \u0438\u0445 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043b\u0430 \u0441\u0430\u043c\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0432 out_code. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u043b\u0435\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0432\u0445\u043e\u0434\u0430\u0445 \u0438 \u0432\u044b\u0445\u043e\u0434\u0430\u0445 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041d\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0447\u0442\u043e-\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u0440\u043e\u043b\u043e\u0433\u0430\u043c\u0438-\u044d\u043f\u0438\u043b\u043e\u0433\u0430\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440, \u0442.\u0435. \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0438\u043d\u043b\u0430\u0439\u043d\u0438\u0442\u044c \u043a\u043e\u0434 \u0437\u0430 \u0441\u043f\u0438\u0441\u043d\u043e\u0439 \u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u042f \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u044d\u0442\u043e \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c, \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u043c \u043f\u043e\u0433\u043b\u0443\u0431\u0436\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0438\u0437\u0443\u0447\u0438\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u0432 main():  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">main() \u0432\u043d\u0443\u0442\u0440\u0438 translate<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre>     \/* Code section is protected from writes by default, un-protect it *\/     if (mprotect(gen_code, JIT_CODE_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC)) {         perror(&quot;mprotect&quot;);         exit(2);     }     \/* Pre-populate resulting code buffer with INT3 (machine code 0xCC).        This will help to catch jumps to wrong locations *\/     memset(gen_code, 0xcc, JIT_CODE_SIZE);     void* entrypoints[PROGRAM_SIZE] = {0}; \/* a map of guest PCs to capsules *\/          translate_program(cpu.pmem, gen_code, entrypoints, PROGRAM_SIZE);          setjmp(return_buf); \/* Will get here from generated code. *\/          while (cpu.state == Cpu_Running && cpu.steps &lt; steplimit) {         if (cpu.pc &gt; PROGRAM_SIZE) {             cpu.state = Cpu_Break;             break;         }         enter_generated_code(entrypoints[cpu.pc]); \/* Will not return *\/     } <\/pre>\n<\/div>\n<\/div>\n<p>  \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 gen_code. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 mprotect(). \u0417\u0430\u0442\u0435\u043c \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043c gen_code \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043e\u0434\u043d\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 INT3 \u2014 0xcc. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0439\u0434\u0451\u0442 \u043d\u0435 \u0442\u0430\u043a, \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0443\u0442 \u043d\u0430 \u043d\u0435\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442 \u043e\u0442\u043b\u0430\u0434\u043a\u0443.<br \/>  \u0417\u0430\u0442\u0435\u043c \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0442\u043e\u0447\u043a\u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e setjmp(). \u0418\u043c\u0435\u043d\u043d\u043e \u0441\u044e\u0434\u0430, \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0446\u0438\u043a\u043b\u0430 while(), \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0426\u0438\u043a\u043b while \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f entrypoints \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e PC. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u043e\u0437\u043d\u0438\u043a \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u0430 \u0437\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0437 gen_code \u0434\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430?<\/p>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0441\u0432\u043e\u0451 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0435\u0449\u0451 \u0440\u0430\u0437 \u043d\u0430 \u043b\u0438\u0441\u0442\u0438\u043d\u0433 gen_code \u0432\u044b\u0448\u0435. \u0412 \u043d\u0451\u043c \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u2014 \u0432\u0441\u0435 MOV \u0438 CALL \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0431\u044b\u043b\u0438 \u0446\u0438\u043a\u043b\u044b!<br \/>  \u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f \u0433\u043e\u0441\u0442\u0435\u0432\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u2014 \u044d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442: \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u043b\u0438\u043d\u0435\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u043f\u0441\u0443\u043b\u0430\u043c\u0438 \u043a\u043e\u0434\u0430 \u0445\u043e\u0437\u044f\u0439\u0441\u043a\u043e\u0433\u043e. \u042f \u043e\u0431\u043e\u0448\u0451\u043b \u044d\u0442\u0443 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u0440\u044e\u043a. \u0412\u0441\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b, \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0435 PC \u043d\u0435\u043b\u0438\u043d\u0435\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (\u0442.\u0435. Jump, JE, JNE), \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c exit_generated_code(). \u0418 \u0443\u0436\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043a\u043e\u0434, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 entrypoints, \u0437\u0430\u043d\u043e\u0432\u043e \u0437\u0430\u0439\u0434\u0451\u0442 \u0432 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u043a\u043e\u0434 \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443. \u0414\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445, \u00ab\u043e\u0431\u044b\u0447\u043d\u044b\u0445\u00bb \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440, longjmp \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u2014 \u043e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043f\u043e \u043a\u043e\u0434\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443.<\/p>\n<p>  \u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u044f, \u043a\u0430\u043a \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 longjmp \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0434\u043b\u044f JNE, JE \u0438 Jump. \u041c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 \u0438\u0437 entrypoints \u0441\u0440\u0430\u0437\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b, \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 RIP \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0432 \u0432\u044b\u0437\u044b\u0432\u0430\u0432\u0448\u0435\u0439 \u0435\u0451 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u0441\u0440\u0430\u0437\u0443 \u0432 \u043d\u0443\u0436\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435! \u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u044b\u0442\u043b\u0438\u0432\u043e\u0433\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0438\u0434\u0435\u044e.<\/p>\n<p>  \u0423\u0437\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c. \u0422\u0435\u043f\u0435\u0440\u044c VTune \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043b \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u00abFront End Bound\u00bb:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/acc\/185\/77c\/acc18577c46048f0ad331516f5fcff40.png\"\/><\/p>\n<p>  \u0412 \u0432\u0435\u0440\u0445 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043f\u0430\u043b\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u0435\u0440\u0435 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0443\u0441\u043f\u0435\u0445\u043e\u043c:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/154\/ef3\/d9f\/154ef3d9f8d34b56a4c609de0fe8c18e.png\"\/><\/p>\n<p>  \u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430 VTune \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <a href=\"https:\/\/software.intel.com\/en-us\/node\/529995\">JIT Profiling API<\/a>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u0438 \u0432\u044b\u0445\u043e\u0434 \u0432 \u0440\u0435\u0433\u0438\u043e\u043d\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. translated \u0435\u0433\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442, \u043d\u043e \u0434\u043b\u044f \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u043a\u0438 \u043e\u043d \u044f\u0432\u043d\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u043b\u0441\u044f \u0431\u044b.<\/p>\n<h3>\u041a\u0442\u043e \u043a\u043e\u0433\u043e \u2014 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f <\/h3>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0439, \u043d\u043e \u0432\u0441\u0451 \u0435\u0449\u0451 \u0431\u043e\u0439\u043a\u0438\u0439 \u043d\u043e\u0443\u0442\u0431\u0443\u043a Lenovo Thinkpad X220i.  <\/p>\n<ul>\n<li>\u041e\u0421: Ubuntu 12.04.5 LTS, Linux \u0432\u0435\u0440\u0441\u0438\u0438 3.2.0-75-generic x86_64 <\/li>\n<li>\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440: Intel\u00ae Core(TM) i3-2310M CPU @ 2.10GHz<\/li>\n<li>4 \u0413\u0431\u0430\u0439\u0442 \u041e\u0417\u0423<\/li>\n<\/ul>\n<p>  \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b:  <\/p>\n<ul>\n<li>GCC 4.8.1-2ubuntu1~12.04<\/li>\n<li>ICC 15.0.3 20150407<\/li>\n<\/ul>\n<p>  \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c.  <\/p>\n<ul>\n<li>switched \u2014 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440.<\/li>\n<li>threaded \u2014 \u0448\u0438\u0442\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440.<\/li>\n<li>predecoded \u2014 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u0441 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c.<\/li>\n<li>subroutined \u2014 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440.<\/li>\n<li>threaded-cached \u2014 \u0448\u0438\u0442\u044b\u0439 \u0441 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440.<\/li>\n<li>tailrecursive \u2014 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438.<\/li>\n<li>translated \u2014 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440.<\/li>\n<li>native \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 Primes \u043d\u0430 \u0421\u0438. \u041d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0447\u0435\u0441\u0442\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u0412\u041c, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 native \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u043c\u0443 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044e.<\/li>\n<\/ul>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 measure.sh. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0438\u0437\u043c\u0435\u0440\u044f\u043b\u043e\u0441\u044c \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u044f\u0442\u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0414\u043b\u044f GCC:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/eb7\/385\/28d\/eb738528df094489bccc949ed20b9762.png\"\/><\/p>\n<p>  predecoded \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438\u0448\u044c \u0447\u0443\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 switched. \u041f\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043c\u043d\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 threaded \u0442\u0430\u043a \u0438 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 switched. \u0410 \u0432\u043e\u0442 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u0448\u0438\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c, threaded-cached, \u0434\u0430\u043b\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442. \u0423\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u0441\u0435\u0431\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 subroutined \u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0439 \u0441 \u0445\u0432\u043e\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 tailrecursive. \u041e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u0431\u044b\u043b\u043e \u0438 \u0442\u043e, \u0447\u0442\u043e translated \u043e\u0431\u043e\u0448\u0451\u043b \u0432\u0441\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u044b.<\/p>\n<p>  \u0414\u043b\u044f ICC:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/969\/dc8\/1d7\/969dc81d713c43bb99f338b2d4a71170.png\"\/><\/p>\n<p>  \u042d\u0442\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435. \u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0445\u0443\u0434\u0448\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043b threaded, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0432\u0441\u0435 \u043c\u043e\u0438 \u0441\u0442\u0430\u0440\u0430\u043d\u0438\u044f. predecoded \u0436\u0435, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. threaded-cached \u043e\u0431\u043e\u0448\u0451\u043b \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u043f\u043e\u0447\u0442\u0438 \u0441\u0440\u0430\u0432\u043d\u044f\u0432\u0448\u0438\u0441\u044c \u0441 translated, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439.<\/p>\n<p>  \u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e ICC \u043d\u0435 \u043f\u043e\u043d\u044f\u043b \u043c\u043e\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u043e\u043c\u043e\u0447\u044c \u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0448\u0438\u0442\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u0442.\u043a. \u043d\u0435 \u0432\u0441\u0435 \u043e\u043f\u0446\u0438\u0438 GCC \u043e\u043d \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442:  <\/p>\n<pre> icc -std=c11 -O2 -Wextra -Werror -gdwarf-3 -fno-gcse -fno-thread-jumps -fno-cse-follow-jumps -fno-crossjumping -fno-cse-skip-blocks -fomit-frame-pointer threaded-cached.c -o threaded-cached icc: command line warning #10006: ignoring unknown option '-fno-gcse' icc: command line warning #10006: ignoring unknown option '-fno-thread-jumps' icc: command line warning #10006: ignoring unknown option '-fno-cse-follow-jumps' icc: command line warning #10006: ignoring unknown option '-fno-crossjumping' icc: command line warning #10006: ignoring unknown option '-fno-cse-skip-blocks' <\/pre>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0439, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0430\u0445 ICC. \u041d\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u0438 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u0443\u0445\u043b\u0430 \u0434\u043e \u043d\u0435\u043f\u0440\u0438\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044e \u0441\u0435\u0431\u0435 \u043e\u0442\u043b\u043e\u0436\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u043d\u0430\u043b\u0438\u0437 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u041a\u0430\u043a \u0438 \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043a\u043e\u0434\u0430 \u0412\u041c, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u044b \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u043d\u0435 \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f: \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u043a\u0430\u043a \u0438\u0437\u043c\u0435\u043d\u044f\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u0448\u0438\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0438 \u043a\u0430\u043a\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043e\u0442 \u0438\u0445 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<br \/>  \u041d\u0435\u043c\u0430\u043b\u0443\u044e, \u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e, \u0440\u043e\u043b\u044c \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0433\u0440\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0445 \u0438\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u0445\u043e\u0440\u043e\u0448\u043e, \u0430 \u0432\u043e\u0442 \u0441\u0443\u043f\u0435\u0440\u043d\u0430\u0432\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u0430\u044f \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0432 \u0445\u0432\u043e\u0441\u0442\u0435 \u0441\u043f\u0438\u0441\u043a\u0430.<br \/>  \u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430, \u0441\u043e\u0432\u0435\u0441\u0442\u044c \u043c\u043e\u044f \u043f\u0435\u0440\u0435\u0434 \u0441\u0430\u043c\u0438\u043c \u0441\u043e\u0431\u043e\u0439 \u0447\u0438\u0441\u0442\u0430, \u043f\u043e\u0440\u0430 \u0438 \u0432 \u043e\u0442\u043f\u0443\u0441\u043a. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<h3>\u041b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0430<\/h3>\n<ol>\n<li>\u0411\u0430\u0440\u0430\u043d\u043e\u0432 \u0421. \u041d., \u041d\u043e\u0437\u0434\u0440\u0443\u043d\u043e\u0432 \u041d. \u0420. \u042f\u0437\u044b\u043a \u0424\u043e\u0440\u0442 \u0438 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. 1988 \u0418\u0437\u0434\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u00ab\u041c\u0430\u0448\u0438\u043d\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435\u00bb 2.1. \u0428\u0438\u0442\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0435\u0433\u043e \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u0438 <a href=\"http:\/\/www.netlib.narod.ru\/library\/book0001\/ch02_01.htm\">www.netlib.narod.ru\/library\/book0001\/ch02_01.htm<\/a><\/li>\n<li>M. Anton Ertl. 2007. Speed of various interpreter dispatch techniques V2 <a href=\"http:\/\/www.complang.tuwien.ac.at\/forth\/threading\/\">www.complang.tuwien.ac.at\/forth\/threading<\/a><\/li>\n<li>James E. Smith and Ravi Nair. Virtual machines \u2013 Versatile Platforms for Systems and Processes. Elsevier, 2005. ISBN 978-1-55860-910-5.<\/li>\n<li>M. Anton Ertl and David Gregg. The structure and performance of efficient interpreters \/\/ Journal of Instruction-Level Parallelism 5 (2003), pp. 1\u201325. <a href=\"http:\/\/www.jilp.org\/vol5\/v5paper12.pdf\">www.jilp.org\/vol5\/v5paper12.pdf<\/a> <\/li>\n<li>Terrence Parr. Language Implementation Patterns \u2014 The Pragmatic Bookshelf, 2010. ISBN-10: 1-934356-45-X ISBN-13: 978-1-934356-45-6<\/li>\n<\/ol>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/261665\/\"> http:\/\/habrahabr.ru\/post\/261665\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<br \/>\n<blockquote><p>\u0412\u0441\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 Computer Science \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u044b \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u0417\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0439: \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438.<br \/>  All problems in computer science can be solved by another level of indirection, except for the problem of too many layers of indirection.<\/p><\/blockquote>\n<p>  \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u044b \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u0441\u0432\u043e\u0435\u0439 \u043d\u0435\u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0442\u044b. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c.<br \/>  \u042f \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 <a href=\"http:\/\/habrahabr.ru\/company\/intel\/blog\/202926\/\">\u0445\u043e\u0442\u0435\u043b<\/a> \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u0432. \u041f\u0440\u044f\u043c\u043e \u0442\u0430\u043a\u0438 \u043e\u0431\u0435\u0449\u0430\u043b, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441\u0430\u043c\u043e\u043c\u0443 \u0441\u0435\u0431\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0449\u0438\u0445 (\u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u043e\u043f\u0440\u043e\u0432\u0435\u0440\u0433\u0430\u044e\u0449\u0438\u0445) \u043c\u043e\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b. \u041d\u043e \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u044f \u0433\u043e\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0447\u0442\u0435\u043d\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043f\u0440\u0438\u0447\u0451\u043c \u0434\u0430\u0436\u0435 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435, \u0447\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f.<br \/>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0441\u0435\u043c\u044c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0412\u041c \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041e\u0442 \u0441\u0430\u043c\u044b\u0445 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445 \u043c\u044b \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043a \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u043c, \u043f\u043e\u043e\u0447\u0435\u0440\u0451\u0434\u043d\u043e \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u044f\u0441\u044c \u043e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u00ab\u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439\u00bb \u0432 \u043a\u043e\u0434\u0435, \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<br \/>  \u0422\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0431\u043e\u0438\u0442\u0441\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0445 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u043e\u0432, \u0438\u0441\u043f\u0435\u0449\u0440\u0451\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430\u043c\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0421\u0438, \u043e\u0431\u0438\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0439 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u043e\u0439, goto \u0438 \u0434\u0430\u0436\u0435 longjmp, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442 \u0432\u043e \u0438\u043c\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0445 \u043a\u0443\u0441\u043a\u0438 \u0441\u0430\u043c\u0438\u0445 \u0441\u0435\u0431\u044f, \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-261924","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/261924","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=261924"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/261924\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=261924"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=261924"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=261924"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}