powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / 3 вопроса
46 сообщений из 46, показаны все 2 страниц
3 вопроса
    #33731411
1) чем в памяти определяется размер объекта класса? (размерами методов и атрибутов или чем то одним или вообще от этого не зависит?)

2) атрибуты класса могут быть любыми встроенными типами или любыми типами определенными в программе?

3) class A {int x; double y;} как для него сделать операцию сложения (ну там типа const A& operator+(A a) или както иначе???

заранее спасибо!!!
...
Рейтинг: 0 / 0
3 вопроса
    #33731416
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.заранее спасибо!!!Заранее пожалуйста.
А все три ответа есть в любой книжке по С++
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
3 вопроса
    #33731422
приятно иметь дело с добрыми людьми! на 3-ий вопрос я действительно нашел ответ, а на первые два не нашел
...
Рейтинг: 0 / 0
3 вопроса
    #33731424
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.
ТА> приятно иметь дело с добрыми людьми! на 3-ий вопрос я
ТА> действительно нашел ответ, а на первые два не нашелА компилятор под рукой есть ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
3 вопроса
    #33731432
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.1) чем в памяти определяется размер объекта класса? (размерами методов и атрибутов или чем то одним или вообще от этого не зависит?)Вот есть к примеру класс AnsiString. Сколько памяти занимает объект этого класса ?
...
Рейтинг: 0 / 0
3 вопроса
    #33731471
не знаю. ф-ей SizeOf можно определить (прогр. оболочки под рукой нету). ну на скока я понимаю от методов размер объекта не зависит, следовательно он зависит от атрибутов... или вообще не от чего не зависит?
...
Рейтинг: 0 / 0
3 вопроса
    #33731478
а на второй вопрос мне кажется атрибут можно сделать любого типа, который существует в программе. я прав?
...
Рейтинг: 0 / 0
3 вопроса
    #33731498
А. К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тихомиров А.а на второй вопрос мне кажется атрибут можно сделать любого типа, который существует в программе. я прав?

Невнимательно книжку читал :).
Атрибут в С++ есть переменная-член, которая может иметь тип любого известного типа. "Известный" означает что тип должен быть ранее объявлен.
...
Рейтинг: 0 / 0
3 вопроса
    #33731501
теперь на счет первого вопроса. раз виртуальные ф-ии увеличивают размер объекта => размер объекта зависит от методов и атрибутов. я прав?
...
Рейтинг: 0 / 0
3 вопроса
    #33731509
А. КАтрибут в С++ есть переменная-член, которая может иметь тип любого известного типа. "Известный" означает что тип должен быть ранее объявлен. так я же могу придумать свой тип и объявить его заранее
...
Рейтинг: 0 / 0
3 вопроса
    #33731530
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.
ТА> теперь на счет первого вопроса. раз виртуальные ф-ии
ТА> увеличивают размер объекта => размер объекта зависит от
ТА> методов и атрибутов. я прав?Близко к истине, но ... в конструкторе объекта могут создаваться некие объекты в памяти, и никакой sizeof тебе не скажет по них
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
3 вопроса
    #33731548
тогда кроме методов и атрибутов от чего ещё зависит размер объекта?
...
Рейтинг: 0 / 0
3 вопроса
    #33731590
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.
ТА> тогда кроме методов и атрибутов от чего ещё зависит
ТА> размер объекта?От того, сколько памяти выделяется в конструкторе или в других методах ... вобще - размер объекта - это очень размытое понятие
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
3 вопроса
    #33731633
Ggggguest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это есть такой тест, ответив на который например так:
1.
Атрибуты класса могут быть
только целыми числами
любыми встроенными типами (!)
любого определенного в программе типа
2.
Если имеется код
class A { public: int a; };
A *obj;
как обратиться к переменной a?
obj.a
obj-a
obj->a (!)
obj::a
3.
Какое из приведенных ниже определений операции сложения для класса
class A {int x; double y;}
является наиболее правильным?
void operator+ (const A& a) const
const A& operator+(A a)
A operator+(const A& a) const (!)
const A& operator(const A& a)
4.
Сколько ошибок обнаружит компилятор в следующем коде?
class Ping {
public:
Ping() const {};
Ping(int _x) { x = _x; };
int SetX(int _x) const { x = _x; };
const int GetX(int _x) const { return x; };
private:
int x;
};
1 (!)
2
3
4
5
5. Фрагмент программы
for(i=n-1; i>=0; i--)
for(j=0; j<n-i-1; j++)
a [j]=1;
заполнит элементы квадратной матрицы (n-размерность матрицы)
на главной диагонали
над главной диагональю
над побочной диагональю (!)
на побочной диагонали
под побочной диагональю
6.
Размер объекта класса в памяти определяется
суммой размеров методов класса и атрибутов класса (!)
суммой размеров методов класса
суммой размеров атрибутов класса
не зависит от размеров атрибутов и методов класса

выдаст - тест не пройден!
...
Рейтинг: 0 / 0
3 вопроса
    #33731644
Ggggguest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
шрифт поменялся.
ну короче так:
это есть такой тест, ответив на который например так:
1.
Атрибуты класса могут быть
только целыми числами
любыми встроенными типами (!)
любого определенного в программе типа
2.
Если имеется код
class A { public: int a; };
A *obj;
как обратиться к переменной a?
obj.a
obj-a
obj->a (!)
obj::a
3.
Какое из приведенных ниже определений операции сложения для класса
class A {int x; double y;}
является наиболее правильным?
void operator+ (const A& a) const
const A& operator+(A a)
A operator+(const A& a) const (!)
const A& operator(const A& a)
4.
Сколько ошибок обнаружит компилятор в следующем коде?
class Ping {
public:
Ping() const {};
Ping(int _x) { x = _x; };
int SetX(int _x) const { x = _x; };
const int GetX(int _x) const { return x; };
private:
int x;
};
1 (!)
2
3
4
5
5. Фрагмент программы
Код: plaintext
1.
2.
for(i=n- 1 ; i>= 0 ; i--)
for(j= 0 ; j<n-i- 1 ; j++)
a[j]= 1 ;
заполнит элементы квадратной матрицы (n-размерность матрицы)
на главной диагонали
над главной диагональю
над побочной диагональю (!)
на побочной диагонали
под побочной диагональю
6.
Размер объекта класса в памяти определяется
суммой размеров методов класса и атрибутов класса (!)
суммой размеров методов класса
суммой размеров атрибутов класса
не зависит от размеров атрибутов и методов класса

выдаст - тест не пройден!
...
Рейтинг: 0 / 0
3 вопроса
    #33731699
дело не в тесте.
Т.е. заранее определить размер объекта невозможно?
...
Рейтинг: 0 / 0
3 вопроса
    #33731742
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.Т.е. заранее определить размер объекта невозможно?Если под размером объекта понимать всю память, которую выделили в конструкторе и в процессе работы - то в общем случае заранее нельзя.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
3 вопроса
    #33731782
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хехе.

Про размер могу только сказать, что может вообще ничего не занимать

Вчерась вот эксперементировали. Класс содержит переменную типа int и функцию установки значения этой переменной.

В программе создается объект класса, устанавливается значение равное "1"
и printf оно выводится.

Знаете что в результате?)

push $1
push .string;"%d" которая
call _printf

:-)

__________________
For more information, please proceed to http://www.ot-e.biz
...
Рейтинг: 0 / 0
3 вопроса
    #33731857
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hellПро размер могу только сказать, что может вообще ничего не занимать

Не может, согласно стандарту С++. Объект должен обладать идентичностью, и, поскольку в С++ объект идентифицируется его адресом (указателем на него), то никакие два разных объекта не должны иметь одинаковый адрес, поэтому минимальный размер объекта - 1 байт.
...
Рейтинг: 0 / 0
3 вопроса
    #33731885
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) чем в памяти определяется размер объекта класса? (размерами методов и атрибутов или чем то одним или вообще от этого не зависит?)

Размером всех нестатических атрибутов класса, которые неупакованы в union-ы. Если они упакованы, то для каждого набора атрибутов, попадающих в один union выделяется максимальный размер из всех атрибутов. Плюс могут добавляться также накладные расходы, связанные с реализацией runtime-полиморфизма, как например, размер указателя на таблицу виртуальных функций.

2) атрибуты класса могут быть любыми встроенными типами или любыми типами определенными в программе?

любыми типами определенными в программе, естественно.

3) class A {int x; double y;} как для него сделать операцию сложения (ну там типа const A& operator+(A a) или както иначе???

Обычно определяется так:
A operator+(const A &right);

Но operator + может быть также и не-member function , тогда

A operator+(const A &left, const A &right);
...
Рейтинг: 0 / 0
3 вопроса
    #33731887
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.не знаю. ф-ей SizeOf можно определить (прогр. оболочки под рукой нету).

size_of не функция, а операция.
...
Рейтинг: 0 / 0
3 вопроса
    #33731895
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тихомиров А.теперь на счет первого вопроса. раз виртуальные ф-ии увеличивают размер объекта => размер объекта зависит от методов и атрибутов. я прав?

Нет, не прав, потому как он увеличивает размер объекта на фиксированный кусок памяти.
...
Рейтинг: 0 / 0
3 вопроса
    #33731908
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас БарабасБлизко к истине, но ... в конструкторе объекта могут создаваться некие объекты в памяти, и никакой sizeof тебе не скажет по них


Эта память не входит в то, что называется размером объекта. Это входит в объем памяти, нужный для создания нового объекта данного класса, ее действительно нельзя никак узнать (по стандарту).
...
Рейтинг: 0 / 0
3 вопроса
    #33731937
Homosum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggggguestшрифт поменялся.
ну короче так:
это есть такой тест, ответив на который например так:
1.
Атрибуты класса могут быть
только целыми числами
любыми встроенными типами (!)
любого определенного в программе типа
2.
Если имеется код
class A { public: int a; };
A *obj;
как обратиться к переменной a?
obj.a
obj-a
obj->a (!)
obj::a
3.
Какое из приведенных ниже определений операции сложения для класса
class A {int x; double y;}
является наиболее правильным?
void operator+ (const A& a) const
const A& operator+(A a)
A operator+(const A& a) const (!)
const A& operator(const A& a)
4.
Сколько ошибок обнаружит компилятор в следующем коде?
class Ping {
public:
Ping() const {};
Ping(int _x) { x = _x; };
int SetX(int _x) const { x = _x; };
const int GetX(int _x) const { return x; };
private:
int x;
};
1 (!)
2
3
4
5
5. Фрагмент программы
Код: plaintext
1.
2.
for(i=n- 1 ; i>= 0 ; i--)
for(j= 0 ; j<n-i- 1 ; j++)
a[j]= 1 ;
заполнит элементы квадратной матрицы (n-размерность матрицы)
на главной диагонали
над главной диагональю
над побочной диагональю (!)
на побочной диагонали
под побочной диагональю
6.
Размер объекта класса в памяти определяется
суммой размеров методов класса и атрибутов класса (!)
суммой размеров методов класса
суммой размеров атрибутов класса
не зависит от размеров атрибутов и методов класса

выдаст - тест не пройден!


Для четвертого вопроса на мой взгляд ответ 3. Компилятор должен выдать 3 ошибки в строке:
int SetX(int _x) const { x = _x; };

Во первых константый метод пытается изменить внутреннюю переменную, а во вторый он обязательно должен выдавать значение. Также по моему будет ошибка на лишние ; за фигурной скобкой.

Насчет того, чем определяется размер объекта в памяти класса. У Джеса Либерти ясно написано, что размер объекта (именно объекта, а не таблицы виртуальных функции и т.д.) опредяелсяет только по размеру атрибутов класса. Причем если объявлен указатель на какой либо другой объект, то именно указаль является его атрибутом и его размер будет учитываться, а не размер объекта, на который ссылается данный указатель член.
...
Рейтинг: 0 / 0
3 вопроса
    #33731947
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
M> Эта память не входит в то, что называется размером
M> объектаТ.е. размер объекта - это сколько памяти отвел компилятор для него, так получается
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
3 вопроса
    #33731967
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас БарабасТ.е. размер объекта - это сколько памяти отвел компилятор для него, так получается


Конечно.
...
Рейтинг: 0 / 0
3 вопроса
    #33731987
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Homosum
это есть такой тест, ответив на который например так:


Где берешь тесты такие ?
...
Рейтинг: 0 / 0
3 вопроса
    #33732007
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
6.
Размер объекта класса в памяти определяется
суммой размеров методов класса и атрибутов класса
суммой размеров методов класса
суммой размеров атрибутов класса
не зависит от размеров атрибутов и методов класса


Правильный ответ - "суммой размеров атрибутов класса".
Понятия "размер метода класса" вообще не существует, у метода нет размера.
...
Рейтинг: 0 / 0
3 вопроса
    #33732163
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv...
Понятия "размер метода класса" вообще не существует, у метода нет размера.Это конечно так, но наличие виртуальных на размер класса влияет.
...
Рейтинг: 0 / 0
3 вопроса
    #33732170
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5. Фрагмент программы
for(i=n-1; i>=0; i--)
for(j=0; j<n-i-1; j++)
a[j]=1;
заполнит элементы квадратной матрицы (n-размерность матрицы)
на главной диагонали
над главной диагональю
над побочной диагональю (!)
на побочной диагонали
под побочной диагональю

- вопрос вообще неправильный. Не понятно, как объявлена a и как в ней (если это одномерный массив) хранится двухмерная матрица - по стобцам или по строкам.
...
Рейтинг: 0 / 0
3 вопроса
    #33732177
Homosum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Балтика MasterZiv...
Понятия "размер метода класса" вообще не существует, у метода нет размера.Это конечно так, но наличие виртуальных на размер класса влияет.


Как??? Как наличие виртуальных методов может влиять на размер объекта класса? Наличие виртуальных методов может влиять на накладные расходы памяти по работе с ними - таблицы вирутальных функций и т.д., но не на сам объект класса.
...
Рейтинг: 0 / 0
3 вопроса
    #33732205
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Homosum _Балтика MasterZiv...
Понятия "размер метода класса" вообще не существует, у метода нет размера.Это конечно так, но наличие виртуальных на размер класса влияет.


Как??? Как наличие виртуальных методов может влиять на размер объекта класса? Наличие виртуальных методов может влиять на накладные расходы памяти по работе с ними - таблицы вирутальных функций и т.д., но не на сам объект класса.Как только появляется хотя-бы один вирт. метод класса, в первых четырех байтах объекта класса появляется указатель на его VMT.
...
Рейтинг: 0 / 0
3 вопроса
    #33732470
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если было наследование от нескольких классов с виртуальными методами, по-видимому, будет несколько указателей.
...
Рейтинг: 0 / 0
3 вопроса
    #33732505
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoа если было наследование от нескольких классов с виртуальными методами, по-видимому, будет несколько указателей.Нет, один. Он указывает, на смещение от начала VMT первого родительского класса, имеющего вирт. методы.
...
Рейтинг: 0 / 0
3 вопроса
    #33732518
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Балтика maXmoа если было наследование от нескольких классов с виртуальными методами, по-видимому, будет несколько указателей.Нет, один. Он указывает, на смещение от начала VMT первого родительского класса, имеющего вирт. методы.Извиняюсь, ерунду написяал. У каждого класса своя VMT.
...
Рейтинг: 0 / 0
3 вопроса
    #33732726
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только они, имхо, объединены в одну таблицу, чтобы иметь доступ ко всем методам через один указатель на начало таблицы.
...
Рейтинг: 0 / 0
3 вопроса
    #33733062
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoтолько они, имхо, объединены в одну таблицу, чтобы иметь доступ ко всем методам через один указатель на начало таблицы.Нет, абсолютно разные.
...
Рейтинг: 0 / 0
3 вопроса
    #33733250
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот набросал ради интереса :)
Код: plaintext
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.
30.
31.
32.
33.
34.
#include <iostream>
#include <tchar.h>
#include <windows.h>

class c1 {
public:
	int i;
	c1() : i( 0 )	{}
	virtual ~c1() {}
};

class c2 {
public:
	int i;
	c2() : i( 0 )	{}
};

class c3 : public c1 {
public: 
	virtual ~c3(){}
};

class c4 : public c1 {
public: 
	virtual ~c4() {}
};

int _tmain(int argc, _TCHAR* argv[])
{
	c1 o1;	c2 o2;	c3 o3;	c4 o4;
	printf("sizeof(c1) = %d\nsizeof(c2) = %d\n\n", sizeof(o1), sizeof(o2));
	printf("VMT c1: %p\nVMT c2: %p\nVMT c3: %p\nVMT c4: %p\n", (void*)(*(int*)(&o1)), (void*)(*(int*)(&o2)), (void*)(*(int*)(&o3)), (void*)(*(int*)(&o4)));
	::Sleep( 5000 );
	return  0 ;
}
...
Рейтинг: 0 / 0
3 вопроса
    #33733488
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
class c1
{
public:
	int z1;
	virtual int func();
	virtual int func1();
};

int c1::func()
{ return  1 ; }

int c1::func1()
{ return  1 ; }

class c2
{
public:
	int z2;
	virtual int func();
	virtual int func2();
};

int c2::func()
{ return  2 ; }

int c2::func2()
{ return  2 ; }

class c3: public c1, public c2
{
public:
	int z3;
	virtual int func();
	virtual int func3();
};

int c3::func()
{ return  3 ; }

int c3::func3()
{ return  3 ; }

int _tmain(int argc, _TCHAR* argv[])
{
	c3 *obj; int i;
	obj = new c3();
	obj->z1= 1 ; obj->z2= 2 ; obj->z3= 3 ;
	_tprintf(_T("dump:\n"));
	for(i= 0 ;i<sizeof(*obj);i++)
	{
		_tprintf(_T(" %u\n"), *((int*)obj+i) );
	}
	return  0 ;
}
выдаёт:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
dump:
 4350748
 1
 4350016
 2
 3
 4261281277
 524315
 3722248192
 3277392
 3277392
 3722304989
 3722304989
 3722304989
 3722304989
 3722304989
 3722304989
 3722304989
 3722304989
 3722304989
 3722304989
сам sizeof равен 20. Откуда 20-то?
...
Рейтинг: 0 / 0
3 вопроса
    #33733496
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, блин, ступил...
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
3 вопроса
    #33733521
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну дак здесь-же наследование множественное. Два указателя на VMT (8 байт) плюс 3 интежера (12 байт). 8 + 12 = 20 :).
...
Рейтинг: 0 / 0
3 вопроса
    #33733774
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот вам вообщем пример.

Код: plaintext
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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
hell@hells:/tmp/test$ cat  1 .cpp
#include <stdio.h>

class t
{
public: 
  int x;
  void setx(int i) {x=i;}
};

int main(void)
{
  t z;
  z.setx( 55 );
  printf("%d\n", z.x);
  return  0 ;
}


hell@hells:/tmp/test$ cat  1 .s 
	.file	"1.cpp"
	.section	.rodata.str1. 1 ,"aMS",@progbits, 1 
.LC0:
	.string	"%d\n"
	.text
	.align  2 
.globl main
	.type	main, @function
main:
.LFB3:
	pushl	%ebp
.LCFI0:
	movl	%esp, %ebp
.LCFI1:
	pushl	$ 55 
	pushl	$.LC0
.LCFI2:
	call	printf
	xorl	%eax, %eax
	leave
	ret
.LFE3:
	.size	main, .-main
	.section	.eh_frame,"a",@progbits
.Lframe1:
	.long	.LECIE1-.LSCIE1
.LSCIE1:
	.long	0x0
	.byte	0x1
	.string	"zP"
	.uleb128 0x1
	.sleb128 - 4 
	.byte	0x8
	.uleb128 0x5
	.byte	0x0
	.long	__gxx_personality_v0
	.byte	0xc
	.uleb128 0x4
	.uleb128 0x4
	.byte	0x88
	.uleb128 0x1
	.align  4 
.LECIE1:
.LSFDE1:
	.long	.LEFDE1-.LASFDE1
.LASFDE1:
	.long	.LASFDE1-.Lframe1
	.long	.LFB3
	.long	.LFE3-.LFB3
	.uleb128 0x0
	.byte	0x4
	.long	.LCFI0-.LFB3
	.byte	0xe
	.uleb128 0x8
	.byte	0x85
	.uleb128 0x2
	.byte	0x4
	.long	.LCFI1-.LCFI0
	.byte	0xd
	.uleb128 0x5
	.byte	0x4
	.long	.LCFI2-.LCFI1
	.byte	0x2e
	.uleb128 0x8
	.align  4 
.LEFDE1:
	.ident	"GCC: (GNU) 4.0.4 20060507 (prerelease) (Debian 4.0.3-3)"
	.section	.note.GNU-stack,"",@progbits
hell@hells:/tmp/test$


Всё как я обещал. Засунули в стек 55, потом указатель на строку формата и вызвали принтф)
__________________
For more information, please proceed to http://www.ot-e.biz
...
Рейтинг: 0 / 0
3 вопроса
    #33734099
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Балтика MasterZiv...
Понятия "размер метода класса" вообще не существует, у метода нет размера.Это конечно так, но наличие виртуальных на размер класса влияет.

Незначительно. Как и выравнивание.

Кстати , про выравнивание забыл написать. Некоторые компиляторы на некоторых системах для более быстрого доступа к классу и его элементам могут выравнивать поля и/или сам класс по границам слов, двойных слов или полуслов (это все зависит от системы) и таким образом размер объекта может вырости. Обычно все это может настраиваться на уровне опций компилатора, если конечно это возможно в принципе (в смысле делать и так, и так).
...
Рейтинг: 0 / 0
3 вопроса
    #33734101
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Homosum

Как??? Как наличие виртуальных методов может влиять на размер объекта класса?

Ну указатель на таблицу виртуальных методов добавляется в объект, а может даже и не один. Меняется, но незначительно.
...
Рейтинг: 0 / 0
3 вопроса
    #33734104
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoа если было наследование от нескольких классов с виртуальными методами, по-видимому, будет несколько указателей.

Именно так. Если хоть одна ветка наследования невиртуальная, естественно.
...
Рейтинг: 0 / 0
3 вопроса
    #33734141
Homosum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv Homosum

Как??? Как наличие виртуальных методов может влиять на размер объекта класса?

Ну указатель на таблицу виртуальных методов добавляется в объект, а может даже и не один. Меняется, но незначительно.


MasterZiv, Балтика, спасибо большое - буду знать!
...
Рейтинг: 0 / 0
46 сообщений из 46, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / 3 вопроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]