Форум программистов, компьютерный форум CyberForum.ru

В дизассемблерованном коде отсутствует позднее связывание. Оптимизация? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Связь указателей и одномерных массивов. Динамический одномерный массив http://www.cyberforum.ru/cpp/thread329983.html
Ребят помогите написать программу.В пятницу срочно надо сдать! Требования и общие указания к заданиям: • разработать класс для работы с одним или несколькими одномер-ными динамическими массивами, предусмотрев конструктор, деструктор, методы для ввода, вывода массива и в зависимости от варианта один или несколько методов для обработки массивов. По усмотрению пре-подавателя в класс можно...
C++ CRITICAL_SECTION 2 потока Задача заставить 2 потока работать точно друг за другом(по очереди): main() { /*инициализация*/ EnterCriticalSection( &cs );//блокировка первого потока EnterCriticalSection( &cs2 );//блокировка второго потока /*запуск потоков*/ } http://www.cyberforum.ru/cpp/thread329323.html
C++ Работа с формами
Будьте добры. Подскажите , как вписать код в формы? Чтобы , когда я делаю кнопочки, они делали то, что я хочу. Понимаю, что тема широкая, поэтому может кто ресурс укажет. В поисковике никак грамотно не могу ввести.
C++ В конец целочисленного двоичного файла дописать нечетные значения, содержащиеся в другом целочисленном текстовом файле
Дано такое задание: Дописывание в файл. В конец целочисленного двоичного файла дописать нечетные значения, содержащиеся в другом целочисленном текстовом файле. Итоговый файл должен иметь строго двоичный формат. Вот что получилось у меня по ходу решения! #define t 1024 #include <stdio.h> #include <stdlib.h> #include <conio.h>
C++ База на Code Blokcs C++ http://www.cyberforum.ru/cpp/thread328872.html
Помогите дописать практику с базой, проверьте написанный код и помогите добавить, вывод из файла, редактирование по id(vuz) и удаление (group). если можно с коментариями #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <conio.h> struct group
C++ Программы по умолчанию для расширений Кто знает подскажите, каким образом можно изменить программу по умолчанию для расширений в с\с++, да и не важно в чем. Системных утилит, программ я не нашел которые могут это делать, что бы в дальнешем подключиться к ним. Вообщем может есть некие библиотеки и т.п.? Да, и заодно, когда пользователь выделяет, запускает файл любого расширения, как операционная система определяет программу по... подробнее

Показать сообщение отдельно
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
06.07.2011, 19:14     В дизассемблерованном коде отсутствует позднее связывание. Оптимизация?
Добрый день/утро/вечер (нужное подчеркнуть))
Выдалось свободное время и решил немного пописать марсианского кода) В процессе написания пришлось лезть в дизассемблированный листинг и вот, что я там обнаружил - отсутствует позднее связывание для виртуальных функций. Чтоб было понятно о чем речь - вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<iostream>
class X{
public:
    virtual void f(){std::cout<<"fX\n";}
    virtual void F(){std::cout<<"FX";}
    X(){
        f();
    }
};
class Y:public X{
public: 
        void f(){std::cout<<"fY\n";}
    void F(){std::cout<<"FY\n";}
    Y(){
        f();
    }
 
};
 
 
 
 
int main() {
 Y a;
 a.F();
 void (***ptr)()=(void (***)())&a;
 (**ptr)();//привет 
 (**(*ptr+1))();//с Марса ))
}
Вот, что происходит при вызове a.F():
Assembler
1
2
3
   ;a.F();
   lea         ecx,[a]  
   call        Y::F (1091249h)
т.е. адрес виртуальной функции Y::F() уже известен на стадии компиляции
Так что это - компилятор решил не заморачиваться и вычислил адрес нужной ф-ции (ну типа, код маленький, функций всего две, что я буду лишний код создавать...)) или что-то другое (всмысле может я чего не понимаю) ?

Добавлено через 8 минут
Блин, после сессии глова кругом, туплю...
Вот так будет позднее связывание:
C++
1
2
X *a=new Y;
 a->F();
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru