Здравствуйте, NikeByNike, Вы писали:
NBN>Здравствуйте, Аноним, Вы писали:
А>>что-то вроде :
А>>
А>>int * i=NULL;
А>>i=new int[5]={1,2,3};
А>>
NBN>1. подобные задачи принято решать вектором. NBN>2. если уж очень нужно — есть такая штука как inplace new. NBN>Т.е. ты можешь выделить неинициализированную память под весь массив, а затем пройтись по нему и проинициализировать его вручную, new(i+000)(1); NBN>Кстати — NULL — C'шная приблуда. С++ style == 0
А мне надо сотни тысяч раз в секунду! Ничего что я тут со своими глупыми задачами в вам умным пристаю?!
Вектор, это всего лишь навсего выделить новую память скопировать туда то что было — это типа обманка.
Скорость работы с такими массивами
int i[100];
и vector<int> iv;
Различается в дестяки раз. А памяти лишней сколько жрется.
А потом удивляются — 8 гигов и все мало.
NULL это ПРАВИЛЬНО и только так — для скриптовиков и 0 сойдет, понятно — но указатель это 64 бита или 128 как уменя, а 0 это только 32.
Re[2]: Инициализация массива при создании его через new
E>Не совсем понятно, "5" в этом коде -- константа? А "1, 2, 3"--? E>И типы какие? Стандартные или классы?
E>В общем случае, если ты STL пользуешься, то можно как-то так:[c]template<typename T, typename TIter>
Совсем народ от этох "надстроек" отупел.
Какие типы — int.
Вектора, и пр. щит, не подходит — медленно.
Превратили си в скрипты, и рады.
Строка это последовательность байтов, с длинной и всё. Какие еще там супер типы string, которые в 10 раз снижают производительность программ. Нахрена это индуские вектора?! Что размер не поменять? Да какое волшебство вы ждете от них?
Перестаньте использовать то чего не понимаете, начните отличаться, от индусов.
Re[4]: Инициализация массива при создании его через new
Здравствуйте, Lorenzo_LAMAS, Вы писали:
АТ>>Соврешенно нет. Предание старое, откуда ноги растут — неизвестно
L_L>Вполне известно. Из Страуструпа и его книги "Язык программирования С++". Конечно он не так уж категоричен, но говорит что-то вроде такого:
L_L>
L_L>In C, it has been popular to define a macro NULL to represent the zero pointer. Because of
L_L>C++’s tighter type checking, the use of plain 0, rather than any suggested NULL macro, leads to
L_L>fewer problems. If you feel you must define NULL , use
L_L>const int NULL = 0 ;
L_L>The const qualifier (§5.4) prevents accidental redefinition of NULL and ensures that NULL can be
L_L>used where a constant is required.
У меня в архитектуре int 32 бита а указатель ( это адрес, для скриптовиков ) 128 бит. И что? '0' это 0... У меня по адресу ноль есть данные... Что дальше? Ваш неучь Страуструп нихрена не понимает вообще в СИ и СИ++... Перестаньте читать идиотов.
Re[3]: Не запретить ли анонимов и в профильных форумах?
Здравствуйте, Lorenzo_LAMAS, Вы писали:
А>>Да эта форма инициализации, мне инвестна. Можно даже вроде не только '()' но и (33) L_L>Нет, как и сказал Андрей, только ().
L_L>А по поводу неудобства инициализации — есть такое. Видимо, в будущем это пофиксят при помощи нового синтаксиса инициализаторов для стандартных контейнеров или пользовательских классов. Синтаксиса не помню, но что нить вроде std::vector<int> a = {1,2,3,4,5};
Нет, я все глупости найду и ткну — ребята, а вы случайно на работу принимая народ не тестируете? С такими знаниями, эх... жуть, куда страна катится!!!
int *i=new int(0x33);
Прекрасно работает.
Re[10]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>Ну нифига!!! И зачем это добавлять и так, нормально. А вот нет у меня другого кода.
оптимизатор вполне резонно посчитал что i нигде не использует и просто весь код выбросил
printf объяснил что i нам нужен — вот и вся магия ...
в итоге вектор в 4 раза быстрее на этом примере
Re[5]: Инициализация массива при создании его через new
А>У меня в архитектуре int 32 бита а указатель ( это адрес, для скриптовиков ) 128 бит. И что? '0' это 0... У меня по адресу ноль есть данные... Что дальше? Ваш неучь Страуструп нихрена не понимает вообще в СИ и СИ++... Перестаньте читать идиотов.
Следуя вашему совету, я не должен был читать вашего дико бредового сообщения. Простите за грубость, конечно, но не пишите фигню и не указывайте мне, кого мне читать, а кого — нет. Я уж как-нибудь сам разберусь.
Чисто для справки, не знаю, сколько вам лет, но уверен, что Страуструп знал С тогда, когда вас на свете еще не было.
Of course, the code must be complete enough to compile and link.
Re[3]: Инициализация массива при создании его через new
А>Скорость работы с такими массивами А>int i[100]; А>и vector<int> iv; А>Различается в дестяки раз. А памяти лишней сколько жрется.
Бред. Чтобы не писать такого больше, элементарно поглядите код вектора и что будет, если вы напишете std::vector<int> v(some_size);
А>А потом удивляются — 8 гигов и все мало.
Учите матчасть.
А>NULL это ПРАВИЛЬНО и только так — для скриптовиков и 0 сойдет, понятно — но указатель это 64 бита или 128 как уменя, а 0 это только 32.
Т.е., вы полагаете, что если вы
int * a = 0; то у вас занулится лишь часть битов, а часть — останутся неинициализированными? Да вы жжете, батенька. А еще и Страуструп у вас — "неучь"
Of course, the code must be complete enough to compile and link.
Re[3]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>Скорость работы с такими массивами
А>int i[100];
А>и vector<int> iv;
А>Различается в дестяки раз. А памяти лишней сколько жрется.
А>В итоге, на таком искуственном (!!!) изгонении назница НОЛЬ. Но в рельности такое будет очень редко. Так что вектора это шит. И не надо его совать туда где он нахрен не нужен. !!!
Вектор в 4 раза быстрее == "назница НОЛЬ" для тебя? "Но в рельности такое будет очень редко. Так что вектора это шит" — шит потому, что
быстрее? Да ты индус! Тебя Кумар зовут?
Re[4]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>Как инициализировать массив при его создании через new?
А>например
А>что-то вроде :
А>
А>int * i=NULL;
А>i=new int[5]={1,2,3};
А>
Для 'new[]' поддерживается только один вид инициализатора: '()'. Т.е. можно сделать 'i = new int[5]()' и получить обнуленный массив в результате. Других иницализаторов не поддерживается, т.е. "инициализацию" придется делать потом присваиванием.
Best regards,
Андрей Тарасевич
Re[7]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>Совсем народ от этох "надстроек" отупел.
А>Какие типы — int.
А>Вектора, и пр. щит, не подходит — медленно.
А>Превратили си в скрипты, и рады.
А>Строка это последовательность байтов, с длинной и всё. Какие еще там супер типы string, которые в 10 раз снижают производительность программ. Нахрена это индуские вектора?! Что размер не поменять? Да какое волшебство вы ждете от них?
А>Перестаньте использовать то чего не понимаете, начните отличаться, от индусов.
Тут недавно топик был — сравнивали производитьность рабтоы с вектором и просто с массивом. Так по тестам (проверенным несколькими людьми) оказалось что вектор быстрее работает)
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[4]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 05:49
Оценка:
Здравствуйте, catBasilio, Вы писали:
А>>Перестаньте использовать то чего не понимаете, начните отличаться, от индусов.
B>Тут недавно топик был — сравнивали производитьность рабтоы с вектором и просто с массивом. Так по тестам (проверенным несколькими людьми) оказалось что вектор быстрее работает)
Неверные разультаты , Причем заметьте, я даже и топик не читал — так как подругому и быть не может. 1000%
Re[6]: Инициализация массива при создании его через new
Здравствуйте, Lorenzo_LAMAS, Вы писали:
А>>У меня в архитектуре int 32 бита а указатель ( это адрес, для скриптовиков ) 128 бит. И что? '0' это 0... У меня по адресу ноль есть данные... Что дальше? Ваш неучь Страуструп нихрена не понимает вообще в СИ и СИ++... Перестаньте читать идиотов.
L_L>Следуя вашему совету, я не должен был читать вашего дико бредового сообщения. Простите за грубость, конечно, но не пишите фигню и не указывайте мне, кого мне читать, а кого — нет. Я уж как-нибудь сам разберусь. L_L>Чисто для справки, не знаю, сколько вам лет, но уверен, что Страуструп знал С тогда, когда вас на свете еще не было.
Да и бог с ним. Он пишет БРЕД. Ноль это 0, NULL это не существующий адрес, зависящий от архитекуры. И что? Это факт, Ваш Стратус написал вранье, а сколько его там, кроме этого, уже и не вспомню. Но просто убогий писатель. Деньги зарабатываает тем что пишет книжки, но предмета не знает. Это факт.
Re[4]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 06:56
Оценка:
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, Аноним, Вы писали:
А>>Скорость работы с такими массивами
А>>int i[100];
А>>и vector<int> iv;
А>>Различается в дестяки раз. А памяти лишней сколько жрется.
J>Код в студию. J>Померяем вместе.
наслаждайтесь ...
О люди, хочу что-бы народ извинился.
void fun1 ( )
{
004026B0 83 EC 1C sub esp,1Ch
004026B3 53 push ebx
004026B4 55 push ebp
004026B5 56 push esi
004026B6 57 push edi
vector<int> iv(0x1000);
004026B7 8D 7C 24 14 lea edi,[esp+14h]
004026BB 8D 74 24 18 lea esi,[esp+18h]
004026BF C7 44 24 14 00 00 00 00 mov dword ptr [esp+14h],0
004026C7 E8 F4 12 00 00 call std::vector<int,std::allocator<int> >::_Construct_n (4039C0h)
for ( size_t jv=0; jv<0x1000; jv++ )
004026CC 8B 5C 24 20 mov ebx,dword ptr [esp+20h]
004026D0 8B 7C 24 1C mov edi,dword ptr [esp+1Ch]
004026D4 8B 2D FC A0 40 00 mov ebp,dword ptr [__imp___invalid_parameter_noinfo (40A0FCh)]
004026DA 33 F6 xor esi,esi
004026DC 8D 64 24 00 lea esp,[esp]
iv[jv]=2;
004026E0 85 FF test edi,edi
004026E2 74 0B je fun1+3Fh (4026EFh)
004026E4 8B C3 mov eax,ebx
004026E6 2B C7 sub eax,edi
004026E8 C1 F8 02 sar eax,2
004026EB 3B F0 cmp esi,eax
004026ED 72 02 jb fun1+41h (4026F1h)
004026EF FF D5 call ebp
004026F1 C7 04 B7 02 00 00 00 mov dword ptr [edi+esi*4],2
004026F8 83 C6 01 add esi,1
004026FB 81 FE 00 10 00 00 cmp esi,1000h
00402701 72 DD jb fun1+30h (4026E0h)
}
00402703 85 FF test edi,edi
00402705 74 09 je fun1+60h (402710h)
00402707 57 push edi
00402708 E8 6D 69 00 00 call operator delete (40907Ah)
0040270D 83 C4 04 add esp,4
00402710 5F pop edi
00402711 5E pop esi
00402712 5D pop ebp
00402713 5B pop ebx
00402714 83 C4 1C add esp,1Ch
00402717 C3 ret
--- No source file -------------------------------------------------------------
00402718 CC int 3
00402719 CC int 3
0040271A CC int 3
0040271B CC int 3
0040271C CC int 3
0040271D CC int 3
0040271E CC int 3
0040271F CC int 3
--- 11.cpp -----------------------------
void fun2 ()
{
int i[0x1000];
for ( size_t j=0; j<0x1000; j++ )
i[j]=2;
}
int _tmain ( int argc, _TCHAR* argv[] )
{
00402720 55 push ebp
00402721 8B EC mov ebp,esp
00402723 83 E4 F8 and esp,0FFFFFFF8h
00402726 6A FF push 0FFFFFFFFh
00402728 68 96 9C 40 00 push offset __ehhandler$_wmain (409C96h)
0040272D 64 A1 00 00 00 00 mov eax,dword ptr fs:[00000000h]
00402733 50 push eax
00402734 83 EC 60 sub esp,60h
00402737 53 push ebx
00402738 56 push esi
00402739 57 push edi
0040273A A1 1C 10 41 00 mov eax,dword ptr [___security_cookie (41101Ch)]
0040273F 33 C4 xor eax,esp
00402741 50 push eax
00402742 8D 44 24 70 lea eax,[esp+70h]
00402746 64 A3 00 00 00 00 mov dword ptr fs:[00000000h],eax
fun1();
0040274C E8 5F FF FF FF call fun1 (4026B0h)
fun2();
...
Это получилолсь из — >
#include <vector>
void fun1 ( )
{
vector<int> iv(0x1000);
for ( size_t jv=0; jv<0x1000; jv++ )
iv[jv]=2;
}
void fun2 ()
{
int i[0x1000];
for ( size_t j=0; j<0x1000; j++ )
i[j]=2;
}
int _tmain ( int argc, _TCHAR* argv[] )
{
fun1();
fun2();
}
Re[6]: Не запретить ли анонимов и в профильных форумах?
От:
Аноним
Дата:
07.04.09 07:11
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:
E>>Я бы вот бомбу повесил, но опасаюсь кар модераторов... L_L>А почему? Я — нет. Вешаю.
А>А почему нельзя, что-ли. Чем такие массивы провинились.
А, т.е. вы не понимаете разницу между вектором и встроенным массивом? Ну-ну.
А>Давайте, говрите, что-то типа — ай-ай как мы были не правы. — Это полезно, на самом деле.
Уговорили. Ай-ай, как вы были не правы.
Of course, the code must be complete enough to compile and link.
Re[6]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 07:42
Оценка:
Здравствуйте, catBasilio, Вы писали:
А>>О люди, хочу что-бы народ извинился.
А>>
А>>... многа бреда поскипано.
А>>
Бреда? : ) Люди, ну остановитесь же — вы невладете вопросом, это был релиз... Представляю как Вы огорошены. Но я рад....
Я такой злой, так как меня однажды один из тутошних завсегдатаев-умники завалил на тестировании при преме на работу — теперь я отигрываюсь. Типа изобразал из себя умного — и знающего нечто неведомое простым смертным — ТЕМПЛЕЙТЫ....
Re[8]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 07:59
Оценка:
Здравствуйте, Erop, Вы писали:
А>>Стратус пишет книжки для чайников, Вы чайники? E>Обычно неаккуратное использование кванторов всеобщности характерно для недоучек... E>А что касается автора С++, то он разные книжки написал и пишет. Некоторые вовсе и не для чайников. Хотя я лично по языку С++ справляюсь в стандарте, чего и тебе советую.. Например изучить что там написано про нулевые указатели (как в стандарте С, так и в стандарте С++)
E>>>Страуструп, кстати, вряд ли идиот, в отличии от некоторых коллег... А>>Да, не идиот, я не прав. Извини Стратус. E>Так ты ещё и со "Статусом" беседуешь? Бывает...
ЕРОП, идите в политику, там вас заждались... И там демогогте.
Стандарт описывает не существующий указатель. И не описывает что это должно быть 0... Все мне надо работать, а не заниматься выигрыванием спров... Я уже получил удовольствие, от того что показал скриптовикам с векторами того что они не знали но проверяли знания у людей при приеме на работу. Выграть спор не есть моя цель, поэтому не старайтесь, я обязательно буду применять стандарные ходы, не позволяющие выграть спор будучи не правым. А вообще, скажите, вам что делать нечего? Если вы постоянно сползаете на демагигию?
Все всё поняли.
Re[6]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 08:06
Оценка:
Здравствуйте, Erop, Вы писали: А>>Нет, я все глупости найду и ткну — ребята, а вы случайно на работу принимая народ не тестируете? С такими знаниями, эх... жуть, куда страна катится!!! А>>
А>> int *i=new int(0x33);
А>>
А>>Прекрасно работает.
E>Что-то мне таки кажется, что я бы тебя тоже завернул E>1) Не умеешь себя вести. E>2) При этом очень невнимательный и не понимаешь что у тебя спросили...
Ага, юлим — рыба редкой породы, обладает удивительным свойством вылезать из ловушек расставленных рыбаками.
Re[9]: Инициализация массива при создании его через new
— это доказательство того, кто тут на самом деле троль.
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[6]: Инициализация массива при создании его через new
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, sokel, Вы писали:
S>>хехе, но с другой стороны, вопрос о списке инициализации, так что массив предположительно небольшой, тогда зачем нужен new?
E>В чём суть проблемы топикстартера я тоже не понимаю... http://en.wikipedia.org/wiki/Troll_(Internet)
Of course, the code must be complete enough to compile and link.
Re[11]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 10:07
Оценка:
Здравствуйте, catBasilio, Вы писали:
B>разобрался!!!
... B>в случае с вектором он чесно заполняет массив двойками. B>а функцию fun2 компилятор просто УДАЛИЛ за ненадобностью. Так что QueryPerformanceCounter(&t2); считает просто время выполнения функции QueryPerformanceCounter;
Точно, и это ОТЛИЧНО!
Re[13]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>>В итоге, на таком искуственном (!!!) изгонении назница НОЛЬ. Но в рельности такое будет очень редко. Так что вектора это шит. И не надо его совать туда где он нахрен не нужен. !!!
А>Вектор в 4 раза быстрее == "назница НОЛЬ" для тебя? "Но в рельности такое будет очень редко. Так что вектора это шит" — шит потому, что А>быстрее? Да ты индус! Тебя Кумар зовут?
Я на 2008 студии компилял при отключенной проверке выхода за границы разница 10%.
Но вообще рунтаймовая проверка выхода это очень полезно. Нельзя ее недооценивать. При том что для обычного массива выделенного по new можно запросто забыть позвать delete.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[13]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 10:15
Оценка:
Здравствуйте, Аноним, Вы писали:
А>>В итоге, на таком искуственном (!!!) изгонении назница НОЛЬ. Но в рельности такое будет очень редко. Так что вектора это шит. И не надо его совать туда где он нахрен не нужен. !!!
А>Вектор в 4 раза быстрее == "назница НОЛЬ" для тебя? "Но в рельности такое будет очень редко. Так что вектора это шит" — шит потому, что А>быстрее? Да ты индус! Тебя Кумар зовут?
Ты что не понимаешь? Ноль это значит 0... Нет разнцы, нет в четыре раза. Понял? Разницы нет. И это ТОЛЬКО в этом примере. А так вектор в 36 раз медленее. Вектор это шит. Пора дебангалорить тех кто юзает вектора...
Re[10]: Инициализация массива при создании его через new
А>Я не начинал ... Тролем, начали крутить ВЫ. И оказались не правы — и духу признать это не хватает, а хватает, только флеймить. Причем я считаю, что я то как раз веселиться имею право — я оказался прав.
В том, что вы тролль — я не сомневаюсь и от слов своих не откажусь.
Давайте вы по пунктам приведете мои сообщения (кроме слов о троллях) и обоснуете, в чем я не прав. Подозреваю, что вы это не сделаете.
А>На мой взгляд, способность признать собственные ошибки — говорит о силе человека, а не способность — говорит о слобости. Я вот всегда, без проблем признаю — если был не прав. В чем проблема.
Не вам рассуждать об этом. В этом топике вы наделали кучу ошибок и ни одной не признали. С этого момента, я отвечаю на ваши последующие сообщения _только_ если вы аргументированно отвечаете на мои и не игнорируете вопросы.
Of course, the code must be complete enough to compile and link.
Инициализация массива при создании его через new
От:
Аноним
Дата:
06.04.09 11:06
Оценка:
ОСТОРОЖНО! ЭТО ТРОЛЛЬ!
Дискуссия заморожена, решение окончательное.
— Кодт
Как инициализировать массив при его создании через new?
например
что-то вроде :
int * i=NULL;
i=new int[5]={1,2,3};
Re: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>Как инициализировать массив при его создании через new?
Напрямую — никак. Если типы простые — то создавать массив и потом пройтись по нему в цикле и инициализировать каждый элемент.
Если элементы массива являются объектами каких-либо классов — то создать массив указателей, потом пройтись по нему в цикле и создать каждый элемент по-отдельности, через new, передавая ему нужные параметры.
С уважением, Artem Korneev.
Re: Инициализация массива при создании его через new
Ну а если другая библиотека (за что я только за), то аналогичные конструкции...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>что-то вроде :
А>
А>int * i=NULL;
А>i=new int[5]={1,2,3};
А>
1. подобные задачи принято решать вектором.
2. если уж очень нужно — есть такая штука как inplace new.
Т.е. ты можешь выделить неинициализированную память под весь массив, а затем пройтись по нему и проинициализировать его вручную, new(i+000)(1);
Кстати — NULL — C'шная приблуда. С++ style == 0
Нужно разобрать угил.
Re[2]: Инициализация массива при создании его через new
Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>Здравствуйте, NikeByNike, Вы писали:
NBN>>Кстати — NULL — C'шная приблуда. С++ style == 0
АТ>Соврешенно нет. Предание старое, откуда ноги растут — неизвестно, но — нет.
В молодости читал рассуждения на тему типов, типа NULL суть есть указатель вроде (void *)0, а использование вместо этого (0) должно бы по уму вызывать предупреждение про преобразование целого в указатель, как в случае int* i = 1;
Но что-то там в С++ не срослось, и с 0 теперь можно
Re[4]: Инициализация массива при создании его через new
Здравствуйте, BigBoss, Вы писали:
NBN>>>Кстати — NULL — C'шная приблуда. С++ style == 0
АТ>>Соврешенно нет. Предание старое, откуда ноги растут — неизвестно, но — нет.
BB>В молодости читал рассуждения на тему типов, типа NULL суть есть указатель вроде (void *)0, а использование вместо этого (0) должно бы по уму вызывать предупреждение про преобразование целого в указатель, как в случае int* i = 1; BB>Но что-то там в С++ не срослось, и с 0 теперь можно
Хм... Может я понял мысль, но в реальности все несколько наоборот. В С можно и '(void *) 0' и целочисленный '0'. В С++ же можно только целочисленный '0'.
Best regards,
Андрей Тарасевич
Re[2]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 05:15
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>Для 'new[]' поддерживается только один вид инициализатора: '()'. Т.е. можно сделать 'i = new int[5]()' и получить обнуленный массив в результате. Других иницализаторов не поддерживается, т.е. "инициализацию" придется делать потом присваиванием.
Да эта форма инициализации, мне инвестна. Можно даже вроде не только '()' но и (33)
Хорошо, с нью все так, ну а с ptr'ом ?
Типа int * ia;
ia=int[]={1,2,3,4,5};
ia=(int[]={10,10,11,20});
Да похоже что никак. Жаль. Придется потрахаться немного по больше.
Спасибо.
Re[3]: Инициализация массива при создании его через new
АТ>Соврешенно нет. Предание старое, откуда ноги растут — неизвестно
Вполне известно. Из Страуструпа и его книги "Язык программирования С++". Конечно он не так уж категоричен, но говорит что-то вроде такого:
In C, it has been popular to define a macro NULL to represent the zero pointer. Because of
C++’s tighter type checking, the use of plain 0, rather than any suggested NULL macro, leads to
fewer problems. If you feel you must define NULL , use
const int NULL = 0 ;
The const qualifier (§5.4) prevents accidental redefinition of NULL and ensures that NULL can be
used where a constant is required.
Of course, the code must be complete enough to compile and link.
Re[3]: Инициализация массива при создании его через new
А>Да эта форма инициализации, мне инвестна. Можно даже вроде не только '()' но и (33)
Нет, как и сказал Андрей, только ().
А по поводу неудобства инициализации — есть такое. Видимо, в будущем это пофиксят при помощи нового синтаксиса инициализаторов для стандартных контейнеров или пользовательских классов. Синтаксиса не помню, но что нить вроде std::vector<int> a = {1,2,3,4,5};
Of course, the code must be complete enough to compile and link.
Re[2]: Инициализация массива при создании его через new
А>Ваш Стратус написал вранье, а сколько его там, кроме этого, уже и не вспомню. Но просто убогий писатель. Деньги зарабатываает тем что пишет книжки, но предмета не знает. Это факт.
Скажите, это вы так шутите/троллите своеобразно?
Of course, the code must be complete enough to compile and link.
Re[7]: Инициализация массива при создании его через new
А>Да и бог с ним. Он пишет БРЕД. Ноль это 0, NULL это не существующий адрес, зависящий от архитекуры.
Вы точно знаете, что такое NULL? Как настоящий знаток С, не чета Страуструпу, стандарт С вы читали?
7.17 Common definitions <stddef.h>
3 The macros are
NULL
which expands to an implementation-defined null pointer constant
слова null pointer constant вам что-то говорят?
Of course, the code must be complete enough to compile and link.
Re[5]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>Неверные разультаты , Причем заметьте, я даже и топик не читал — так как подругому и быть не может. 1000%
Вектор выделяет память одним куском. Поэтому реальный объем памяти который потребляет вектор будет складываться из следующих параметров:
capacity — количество заразервированных байт (capacity() >= length())
значение length (sizeof(size_t)) — текущий размер вектора
значение capacity (sizeof(size_t)) — текущее значение capacity
и все!!!
Причем если для вектора взять указатель на первый элемент &array[0] то с ним можно работать как с простым массивом. И стандарт это ГАРАНТИРУЕТ!!!
Замедления работы через operator[] связаны с тем, что в дебажном режиме компиляции стл делает дополнительные проверки, которые отсутствуют в релизе. Поэтому релизный operator [] ничем не отличается от обращения к элементу сишного массива.
Так что поучил бы сначала матчасть, и тесты бы погонял, а потом уж делал такие заявления.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[3]: Инициализация массива при создании его через new
E>>Не совсем понятно, "5" в этом коде -- константа? А "1, 2, 3"--? E>>И типы какие? Стандартные или классы?
E>>В общем случае, если ты STL пользуешься, то можно как-то так:
template<typename T, typename TIter>
А>Совсем народ от этох "надстроек" отупел. :)
Повежливее бы, что ли...
А>Какие типы - int. :)
Ну из вопроса топикстартера не понятно какие типы...
А>Вектора, и пр. щит, не подходит - медленно.
Да? А можешь пояснить в чём разница между [c]std::vector<int> v;
v.reserve( 5 );
и new int[5]?
Кстати, так, как хочет автор в "чистом С++" нельзя...
А>Перестаньте использовать то чего не понимаете, начните отличаться, от индусов.
Ах, мне вот тоже STL не нравится. Но чтобы не использовать надо таки понимать почему не используешь...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: Инициализация массива при создании его через new
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>У меня в архитектуре int 32 бита а указатель ( это адрес, для скриптовиков ) 128 бит. И что? '0' это 0... У меня по адресу ноль есть данные... Что дальше? Ваш неучь Страуструп нихрена не понимает вообще в СИ и СИ++...
И то, что ты не знаешь С++.
В С++ 0 -- это литерал, который может обозначать интегральный 0, а может и нулевой указатель. Бинарное представление нулевого указателя при этом может быть каким угодно. На многих архитектурах, кстати, указатели вообще имеют более сложную структуру, чем одно число...
А>Перестаньте читать идиотов.
Ну они всё пишут и пишут... Случайно можно и прочитать...
Страуструп, кстати, вряд ли идиот, в отличии от некоторых коллег...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: Не запретить ли анонимов и в профильных форумах?
Здравствуйте, igna, Вы писали:
I>IMHO анонимов неплохо бы запретить и в профильных форумах.
Так плохо, так как вопрос задать будет сложнее
Можно по IP, например, банить.
А можно просто выделять сообщения от подозрительных ip. Либо иметь опцию "не показывать сообщения от анонимов, и всё, что растёт из них"...
Ну, либо "огонь! безжалостный огонь!"
Я бы вот бомбу повесил, но опасаюсь кар модераторов...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 07:02
Оценка:
Здравствуйте, Erop, Вы писали:
А>>У меня в архитектуре int 32 бита а указатель ( это адрес, для скриптовиков ) 128 бит. И что? '0' это 0... У меня по адресу ноль есть данные... Что дальше? Ваш неучь Страуструп нихрена не понимает вообще в СИ и СИ++...
E>И то, что ты не знаешь С++. E>В С++ 0 -- это литерал, который может обозначать интегральный 0, а может и нулевой указатель. Бинарное представление нулевого указателя при этом может быть каким угодно. На многих архитектурах, кстати, указатели вообще имеют более сложную структуру, чем одно число...
очень смешно — но как Вы себе представляете отличить один ноль от другого? '0' — вот этот ноль уж будьте любезны трактовать как 0 интовый, а вот этот '0' , как указатель на 0x123412344321AB00 ...
Вперед.
Стратус пишет книжки для чайников, Вы чайники?
E>Страуструп, кстати, вряд ли идиот, в отличии от некоторых коллег...
Да, не идиот, я не прав. Извини Статус.
Re[5]: Не запретить ли анонимов и в профильных форумах?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 07:26
Оценка:
Здравствуйте, Erop, Вы писали:
А>>Да похоже что никак. Жаль. Придется потрахаться немного по больше.
E>А что у тебя таки за задача? Обычно С++ достаточно гибок, чтобы что-то придумать, просто не всегда лекарство лучше болезни
Спасибо , задача простая — но расказывать очень долго. Но главное, чтобы работа с массивом была быстрой. Изменение размера не нужно...
Поэтому вектора и прочий шит не подходит — медленно.
Re[5]: Инициализация массива при создании его через new
1. А теперь откомпиль это в релизе с максимальной оптимизацией и запость опять.
2. В том же релизном коде замерь время выполнения функций fun1, fun2 и результаты опять давай нам.
3. выведи значения sizeof(iv), iv.capacity(), sizeof(i) (для int i[0x1000]) и результаты обратно в форум.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[5]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>Скорость работы с такими массивами int i[100] и vector<int> iv различается в дестяки раз.
Исходя из вопроса, используется всё таки массив, созданный через new, а это уже совсем не то же самое что массив, созданный на стеке.
Скорость работы не отличается (да и не с чего ей отличаться). А вот скорость создания/уничтожения — тут да, но опять таки, используется массив, выделяемый через стандартный new, так что, скорей всего, правильный вектор будет быстрее элементарно за счёт использования правильного аллокатора.
А>А памяти лишней сколько жрется.
А сколько? Динамическое выделение предполагает относительно большой объём, так что на служебные данные вектора вроде размера и т.п. (собственно sizeof(vector)) можно не обращать внимания. Конечно, если вектор не будет зарезервирован, возможно памяти будет использовано больше. Но размер тебе известен, так что reserve в руки...
Re[6]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 07:32
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:
А>>О люди, хочу что-бы народ извинился. L_L>Ну-ну.
Что ну-ну...
ЛНС?
L_L>А почему у вас вектор сравнивается со стековым массивом, а не с массивом в динамической памяти?
А почему нельзя, что-ли. Чем такие массивы провинились.
Давайте, говрите, что-то типа — ай-ай как мы были не правы. — Это полезно, на самом деле.
Re[4]: Инициализация массива при создании его через new
Этот код тоже не то делает. Да ещё и тормозной, к тому же...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>очень смешно — но как Вы себе представляете отличить один ноль от другого? '0' — вот этот ноль уж будьте любезны трактовать как 0 интовый, а вот этот '0' , как указатель на 0x123412344321AB00 ...
Ну стандарт почитай...
Я же говорю, что ты С++ плохо знаешь... А>Вперед.
Чисто для справки. Всё что ниже -- валидно...
void foo( void* );
void foo( int );
void bar()
{
int i = 0;
int* p = 0;
void (*Pf)( int ) = foo;
}
А>Стратус пишет книжки для чайников, Вы чайники?
Обычно неаккуратное использование кванторов всеобщности характерно для недоучек...
А что касается автора С++, то он разные книжки написал и пишет. Некоторые вовсе и не для чайников. Хотя я лично по языку С++ справляюсь в стандарте, чего и тебе советую.. Например изучить что там написано про нулевые указатели (как в стандарте С, так и в стандарте С++)
E>>Страуструп, кстати, вряд ли идиот, в отличии от некоторых коллег... А>Да, не идиот, я не прав. Извини Статус.
Так ты ещё и со "Статусом" беседуешь? Бывает...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>О люди, хочу что-бы народ извинился.
О Аноним!
1) Зарегься
2) Иди потом в народ...
А вообще-то std::vector не умеет хранить буфер в объекте. Это массив в динамической памяти, то есть аналог new int[0x1000]... а вовсе и не автоматического массива...
Если уж меряться, то честно, а то сравнил, понимаешь, попу с пальцем...
Кстати, опции компилятора были какие?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>Я такой злой, так как меня однажды один из тутошних завсегдатаев-умники завалил на тестировании при преме на работу — теперь я отигрываюсь. Типа изобразал из себя умного — и знающего нечто неведомое простым смертным — ТЕМПЛЕЙТЫ....
А что, на заботать ТЕМПЛЕЙТЫ кебы не хватило?
Тоже мне, нашёл чем хвастаться...
Таки, кстати, что за опции-то у компилятора были?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Инициализация массива при создании его через new
Здравствуйте, sokel, Вы писали:
S>хехе, но с другой стороны, вопрос о списке инициализации, так что массив предположительно небольшой, тогда зачем нужен new?
В чём суть проблемы топикстартера я тоже не понимаю...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>Нет, я все глупости найду и ткну — ребята, а вы случайно на работу принимая народ не тестируете? С такими знаниями, эх... жуть, куда страна катится!!!
А>
А> int *i=new int(0x33);
А>
А>Прекрасно работает.
Что-то мне таки кажется, что я бы тебя тоже завернул
1) Не умеешь себя вести.
2) При этом очень невнимательный и не понимаешь что у тебя спросили...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>Поэтому вектора и прочий шит не подходит — медленно.
Не понятно. По идее вектор же может зарезервировать место, и потом его не менять уже. Ты всякие там insert/erase не зови просто и не добавляй больше, чем зарезервировал...
Правда у std::vector есть другие косяки и проблемы с производительностью, ну так массивов-то куча просто под С++ написали уже...
Но это всё не про то. Ты что-то про инициализацию говорил?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[9]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>Стандарт описывает не существующий указатель. И не описывает что это должно быть 0...
Цитаты привести не затруднит?
А>Все мне надо работать, а не заниматься выигрыванием спров...
Ну слил, так слил... Хамить было не обязательно...
А>А вообще, скажите, вам что делать нечего? Если вы постоянно сползаете на демагигию?
Э-э-э? Ты про это?
очень смешно — но как Вы себе представляете отличить один ноль от другого? '0' — вот этот ноль уж будьте любезны трактовать как 0 интовый, а вот этот '0' , как указатель на 0x123412344321AB00 ...
Вперед.
Стратус пишет книжки для чайников, Вы чайники?
А>Все всё поняли.
Уже давно...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: Инициализация массива при создании его через new
Здравствуйте, Аноним, Вы писали:
А>Ага, юлим — рыба редкой породы, обладает удивительным свойством вылезать из ловушек расставленных рыбаками.
Самокритичный, ты наш!!!
Топик посвящён инициализации аллокируемого по new МАССИВА!!!
Ферштейн?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
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>>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);
А>Изучи код, там все просто. И за одно и посмотри ассемблер.
А> Чтобы получить время — надо получить секунды, а не коунтеры.
странно, мне всегда казалось, что надо делить на количество каунтеров в секунду, а не на общее количество каунтеров.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[11]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 09:44
Оценка:
Здравствуйте, WiseAlex, Вы писали:
WA>Здравствуйте, Аноним, Вы писали:
А>>Ну нифига!!! И зачем это добавлять и так, нормально. А вот нет у меня другого кода. WA>оптимизатор вполне резонно посчитал что i нигде не использует и просто весь код выбросил WA>printf объяснил что i нам нужен — вот и вся магия ... WA>в итоге вектор в 4 раза быстрее на этом примере
В итоге, на таком искуственном (!!!) изгонении назница НОЛЬ. Но в рельности такое будет очень редко. Так что вектора это шит. И не надо его совать туда где он нахрен не нужен. !!!
Re[10]: Инициализация массива при создании его через new
в случае с вектором он чесно заполняет массив двойками.
а функцию fun2 компилятор просто УДАЛИЛ за ненадобностью. Так что QueryPerformanceCounter(&t2); считает просто время выполнения функции QueryPerformanceCounter;
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[7]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 10:20
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:
S>>>хехе, но с другой стороны, вопрос о списке инициализации, так что массив предположительно небольшой, тогда зачем нужен new?
E>>В чём суть проблемы топикстартера я тоже не понимаю... L_L>http://en.wikipedia.org/wiki/Troll_(Internet)
Код на столе, а вы где? ... Троль... хм, просто позорище.
Re[14]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 10:23
Оценка:
А>Ты что не понимаешь? Ноль это значит 0... Нет разнцы, нет в четыре раза. Понял? Разницы нет. И это ТОЛЬКО в этом примере. А так вектор в 36 раз медленее. Вектор это шит. Пора дебангалорить тех кто юзает вектора...
Кумар, успокойся. Мерять производительность твоих кретинских программ и кричать про шит начал ты сам. Держи себя в руках.
Re[8]: Инициализация массива при создании его через new
Of course, the code must be complete enough to compile and link.
Re[15]: Инициализация массива при создании его через new
От:
Аноним
Дата:
07.04.09 10:30
Оценка:
Здравствуйте, Аноним, Вы писали:
А>>Ты что не понимаешь? Ноль это значит 0... Нет разнцы, нет в четыре раза. Понял? Разницы нет. И это ТОЛЬКО в этом примере. А так вектор в 36 раз медленее. Вектор это шит. Пора дебангалорить тех кто юзает вектора... А>Кумар, успокойся. Мерять производительность твоих кретинских программ и кричать про шит начал ты сам. Держи себя в руках.
а извиниться? Ну? Дущонкой слабоват? Ты же оказался не прав — почему же не признать?
Не тут явно — ЛНС.
Убого как-то всё у некоторых — слабаки дущой — нож в спину, кляузу, в троем одного... Это все-таки убого, а настоящие мужики — неправ — признаю, был не прав. Извини.
Батаники.
Re[16]: Инициализация массива при создании его через new
А>Не тут явно — ЛНС.
А>Убого как-то всё у некоторых — слабаки дущой — нож в спину, кляузу, в троем одного... Это все-таки убого, а настоящие мужики — неправ — признаю, был не прав. Извини.
А>Батаники.
Мне кажется, вам пора остановиться.
Of course, the code must be complete enough to compile and link.
Re[9]: Инициализация массива при создании его через new
Я не начинал ... Тролем, начали крутить ВЫ. И оказались не правы — и духу признать это не хватает, а хватает, только флеймить. Причем я считаю, что я то как раз веселиться имею право — я оказался прав.
На мой взгляд, способность признать собственные ошибки — говорит о силе человека, а не способность — говорит о слобости. Я вот всегда, без проблем признаю — если был не прав. В чем проблема.