Re[10]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 08:11
Оценка:
Здравствуйте, Erop, Вы писали:
А>>Стандарт описывает не существующий указатель. И не описывает что это должно быть 0... E>Цитаты привести не затруднит?
Erop, фонтсастика КАКОЙ ВЫ НУДНЫЙ... Это не флеймвый форум, я уже все сказал, читайте внимательно.
А>>Все мне надо работать, а не заниматься выигрыванием спров... E>Ну слил, так слил... Хамить было не обязательно...
А>>А вообще, скажите, вам что делать нечего? Если вы постоянно сползаете на демагигию? E>Э-э-э? Ты про это?
очень смешно — но как Вы себе представляете отличить один ноль от другого? '0' — вот этот ноль уж будьте любезны трактовать как 0 интовый, а вот этот '0' , как указатель на 0x123412344321AB00 ...
E>Вперед.
E>Стратус пишет книжки для чайников, Вы чайники?
А>>Все всё поняли. E>Уже давно...
Не... Не те... Мы анонимы, поняли, что ответы некоторых товаришей, надо проверять и проверять. Очень часто, это бывает ошибочное мнение.
Я не слил, потому что не спорил. Я там привел примеры КОДа... Это уже не вырубишь топором. Так что слили тут "умники" местные... А я пойду работать.
Re[5]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>>>Стандарт описывает не существующий указатель. И не описывает что это должно быть 0... E>>Цитаты привести не затруднит? А>Erop, фонтсастика КАКОЙ ВЫ НУДНЫЙ... Это не флеймвый форум, я уже все сказал, читайте внимательно.
Ты сказал неправду...
А>Не... Не те... Мы анонимы, поняли, что ответы некоторых товаришей, надо проверять и проверять. Очень часто, это бывает ошибочное мнение.
О! Все ответы на форумах стоит проверять. Лучше вообще к первоисточника припадать, к стандартам, к документации на компилятор и т. п.
А ещё вежливо стоит общаться...
А>Я не слил, потому что не спорил. Я там привел примеры КОДа... Это уже не вырубишь топором. Так что слили тут "умники" местные... А я пойду работать.
Да? Тебя таки куда-то взяли? Ты зря тратишь время на форумы, IMHO, неоправданно рискуешь... Тем более в МЭК на дворе... Так что правда, иди работать, пока есть где. IMHO, это единственная твоя мудрая идея в ветке...
Кстати, ты таки топикстартер или нет? Если да, то может ты таки внятно объяснишь что у тебя за проблема?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: Инициализация массива при создании его через new
А>Это чьи слова ? Правильно, ваши. Вы оказались не правы, а мне на вид ставили.
Цитируйте все, что было сказано, а не то, что вам лично удобно.
Сделаю это за вас:
Андрей Тарасевич:
Для 'new[]' поддерживается только один вид инициализатора: '()'. Т.е. можно сделать 'i = new int[5]()' и получить обнуленный массив в результате. Других иницализаторов не поддерживается, т.е. "инициализацию" придется делать потом присваиванием
Вы:
Да эта форма инициализации, мне инвестна. Можно даже вроде не только '()' но и (33)
Нет, как и сказал Андрей, только ().
А теперь попробуйте доказать свою правоту. Андрей говорит о new[], и о единственном возможном способе инициализации массива при помощи (). Я говорю о том де. Вы начинаете про (33). Ну что ж, скомпилируйте такое int * p = new int[10](33);
А>
А>А, т.е. вы не понимаете разницу между вектором и встроенным массивом? Ну-ну.
А>Я понимаю,
В таком случае, почему вы сравниваете стековый массив с вектором?
> А вы нет! И это вы отлично уже продемонмтрировали не раз — мне собрать ваши цитаты?
Собирайте.
Of course, the code must be complete enough to compile and link.
Re[7]: Инициализация массива при создании его через new
А>Я такой злой, так как меня однажды один из тутошних завсегдатаев-умники завалил на тестировании при преме на работу — теперь я отигрываюсь. Типа изобразал из себя умного — и знающего нечто неведомое простым смертным — ТЕМПЛЕЙТЫ....
Ах вот оно что! Т.е. вы решили свои комплексы здесь подлечить? Ну так вместо того, чтобы озлобляться и комплексовать, читните на досуге "неуча Страуструпа", он все же поумнее вас будет и вы наконец-то узнаете, в чем же разница между встроенным массивом и вектором, и когда надо использовать вектор. А то так и останетесь злобным неучем.
Of course, the code must be complete enough to compile and link.
Re[6]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 08:29
Оценка:
Здравствуйте, WiseAlex, Вы писали:
WA>если отключить secure stl и заменить в fun2 выделение из стека на выделение в хипе вот результат (VC2005):
... WA>все проинланилось в обоих случаях. разница только в выделении памяти — через аллокатор или просто new WA>т.е. сколько-нибудь заметной разницы нет вообще
WA>стэковый вариант всегда работает быстрее (new и delete не бесплатны) — для этих целей есть boost::array
Хорошо — уговорил —
#include <vector>
void _fastcall fun1 ( vector<int> * piv )
{
00402690 53 push ebx
for ( register size_t jv=0; jv<0x1000; jv++ )
00402691 8B 1D FC B0 40 00 mov ebx,dword ptr [__imp___invalid_parameter_noinfo (40B0FCh)]
00402697 56 push esi
00402698 33 F6 xor esi,esi
0040269A 8D 9B 00 00 00 00 lea ebx,[ebx]
(*piv)[jv]=2;
004026A0 8B 4F 04 mov ecx,dword ptr [edi+4]
004026A3 85 C9 test ecx,ecx
004026A5 74 0C je fun1+23h (4026B3h)
004026A7 8B 47 08 mov eax,dword ptr [edi+8]
004026AA 2B C1 sub eax,ecx
004026AC C1 F8 02 sar eax,2
004026AF 3B F0 cmp esi,eax
004026B1 72 02 jb fun1+25h (4026B5h)
004026B3 FF D3 call ebx
004026B5 8B 47 04 mov eax,dword ptr [edi+4]
004026B8 C7 04 B0 02 00 00 00 mov dword ptr [eax+esi*4],2
004026BF 83 C6 01 add esi,1
004026C2 81 FE 00 10 00 00 cmp esi,1000h
004026C8 72 D6 jb fun1+10h (4026A0h)
004026CA 5E pop esi
004026CB 5B pop ebx
}
004026CC C3 ret
--- No source file -------------------------------------------------------------
004026CD CC int 3
004026CE CC int 3
004026CF CC int 3
--- d:\new my projects\mql2cpp\mql2cpp\mql2cpp.cpp -----------------------------
void _fastcall fun2 ( int * pi)
{
for ( register size_t j=0; j<0x1000; j++ )
pi[j]=2;
}
int _tmain ( int argc, _TCHAR* argv[] )
{
004026D0 55 push ebp
004026D1 8B EC mov ebp,esp
004026D3 83 E4 F8 and esp,0FFFFFFF8h
004026D6 6A FF push 0FFFFFFFFh
004026D8 68 8E A2 40 00 push offset __ehhandler$_wmain (40A28Eh)
004026DD 64 A1 00 00 00 00 mov eax,dword ptr fs:[00000000h]
004026E3 50 push eax
004026E4 64 89 25 00 00 00 00 mov dword ptr fs:[0],esp
004026EB 83 EC 70 sub esp,70h
004026EE 53 push ebx
004026EF 56 push esi
004026F0 57 push edi
vector<int> iv(0x1000);
004026F1 33 DB xor ebx,ebx
004026F3 8D 7C 24 28 lea edi,[esp+28h]
004026F7 8D 74 24 68 lea esi,[esp+68h]
004026FB 89 5C 24 28 mov dword ptr [esp+28h],ebx
004026FF E8 AC 12 00 00 call std::vector<int,std::allocator<int> >::_Construct_n (4039B0h)
int i[0x1000];
fun1( &iv );
00402704 8B FE mov edi,esi
00402706 89 9C 24 84 00 00 00 mov dword ptr [esp+84h],ebx
0040270D E8 7E FF FF FF call fun1 (402690h)
fun2( i );
#include <vector>
void _fastcall fun1 ( vector<int> * piv )
{
for ( register size_t jv=0; jv<0x1000; jv++ )
(*piv)[jv]=2;
}
void _fastcall fun2 ( int * pi)
{
for ( register size_t j=0; j<0x1000; j++ )
pi[j]=2;
}
int _tmain ( int argc, _TCHAR* argv[] )
{
vector<int> iv(0x1000);
int i[0x1000];
fun1( &iv );
fun2( i );
}
Здравствуйте, blackhearted, Вы писали:
B>Все дружно покормили тролля
Начал он вполне нормальным вопросом, ну не знал он про синтаксис. Но потом его что-то прорвало и понесло.
Ясно, что тролль. Но почему-то трудно остановиться и кормежка продолжается
Of course, the code must be complete enough to compile and link.
Re[8]: Инициализация массива при создании его через new
Наверное потому что я только что пообедал что-то сходу не могу сообразить что тут считается.
double d1 = .. — время выполнения fun1
double d2 = .. — время выполнения fun2
d1=d1/f.QuadPart; — отношение времени выполнения fun1() к текущему времени? зачем?
d2=d2/f.QuadPart;
выведи просто А> double d1=(t1.QuadPart-t0.QuadPart); А> double d2=(t2.QuadPart-t1.QuadPart);
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[10]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, catBasilio, Вы писали:
B>>Здравствуйте, Аноним, Вы писали:
А>>>Ок, раз уж пошла такая пьянка, то давай померяем время.
B>>добавь
B>>
B>>#define _SECURE_SCL 0
B>>
B>>перед #include <vector> и проверь еще.
А>Ок — сделал — получилось в 13 раз!!!
Ассемблерный код в студию!!!
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[9]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 09:28
Оценка:
Здравствуйте, catBasilio, Вы писали:
B>Наверное потому что я только что пообедал что-то сходу не могу сообразить что тут считается. B>double d1 = .. — время выполнения fun1 B>double d2 = .. — время выполнения fun2
B>d1=d1/f.QuadPart; — отношение времени выполнения fun1() к текущему времени? зачем? B>d2=d2/f.QuadPart;
B>выведи просто А>> double d1=(t1.QuadPart-t0.QuadPart); А>> double d2=(t2.QuadPart-t1.QuadPart);
Изучи код, там все просто. И за одно и посмотри ассемблер.
Чтобы получить время — надо получить секунды, а не коунтеры.
***
ДА РАЗБЕРИТЕСЬ ЖЕ УЖЕ НАКОНЕЦ!!! люди — ВЫ НЕ ИНДУСЫ. !!!
Re[8]: Инициализация массива при создании его через new