|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Tue Feb 14, 2006 5:40 pm Post subject: |
|
elvman wrote: | Starp citu testi pierada,ka char darbibu izdara 6 reizes atrak,kaa string. |
Man patīk tie "testi pierāda, ka (ieraksti kas) strādā (ieraksti cik reizes) ātrāk par (ieraksti par ko ātrāk)". Pirms posto "kaut kādus testu datus", pievieno linku ar informācijas avotu. Bet nenoliedzami stringam ir jāstrādā nedaudz lēnāk.
Quote: | Ja tu vismaz KAUTKO saproti no programmeeshanas,tad sapratiisi,ka vards "atrak" ir labas (pat ljoti labs,programmeeshanas meerkjis).
Un tavs arguments-"es esmu slinks" pret atrumu ir 0 (NULLE ar lielo N). |
Būsim godī, cik bieži tu at-run-time darbojies ar duci stringiem?
Pie tam ir divas lietas "programmas ātrums" un "programmas izstrādes ātrums". Būtībā optimizēšanu veic tad, kad ir veikta programmas profailošana un ir atrasts "bottleneck", t.i. konstatētas vietas, kuras paņem vislielāko procesora laiku. Un es esmu pārliecināts, ka tas nebūs pie stringiem, ja vien tu neveiksi interpretēšanu/kompilēšanu at-run time, un to tu diez vai darīsi. Pie tam ir taču pieejams STLPort, kam ir virkne optimizāciju un kas ir ātrāks par parasto STL implementāciju.
Quote: | Arii string ir bufferis,kuraa vinsh glabaa simbolu virkni.Tam visu laiku ir jaapalielinaas vai jaasamazinaas,kas arii prasa aatrumu (nerunajot jau par pashu klasi).Arii shim buferim ir savs lielums (dinamisks).Ja iekopeesi lielaaku tekstu shajaa bufferii (ar c_str()),tad rezultaats buus daudz sliktaaks,kaa ja tu rezerveetu buferi (char aa[MAX_PATH]) jau ieprieks. |
Labrīt, lietojot std::string man par viņa izmēriem un pārpildi nav jāuztraucas.
c_str() atriež norādi konstanti, respektīvi, tu viņu nevari sacūkāt, afaik.
Quote: | Un vispar padomaa vienreiz logjiski-ja reiz tu maci jauninjos,tad pasaki, kapec nevienaa c++ tutoriaalii iesaaceejiem saakumaa ir nevis string bet char array.Domaa taa ir sakritiiba (un patiesiibaa reti kursh totorial maaca par string klasi)? | Tāpēc, ka C++ tutoriālī iesācējiem māca programmēšanas bāzi, sintaksi un iespējas. Un, galu galā, lai uztaisītu pašam savu string klasi ir tāpat jāizmanto savs char*(vai cita tipa) masīvs/norāde. Lieta tāda, ka, lietojot std::string, tev par zema līmeņa sīkumiem, kur var viegli kļūdīties, nav jāuztraucas.
Un tēmas, kuras es aizskaru, nav gluži iesācējiem.
EDIT: Giga būtībā pateica to pašu ko es. _________________ Screenshot coming when hell freezes over. |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Tue Feb 14, 2006 6:11 pm Post subject: |
|
Te ir buus viens links:
Code: | java.sun.com/developer/TechTips/1998/tt0120.html |
Tu saproti,ka es neapgalvoju,ka string ir kautkas nelietojams?Es tikai censhos apgazt tavus stulbos stereotipus par to,ka izmantot sprintf ir nepareizi,ka tas ir slikti,neerti utt.Tadelj es tev censhos pieradit,ka char [] izmanto liela dalja programmeetaaju un ka tas nav kautkaads error apkopojums vai arii dabas kljuuda vai veel kas.Un tik un taa es palieku pie sava-ja tu netaisi kautkaadu teksta apstraades programm (palasi forumus-lielaakaa dalja kas izmanto string,vinju arii izmanto liidziigiem meerkjiem.Varbuut man tev arii forumu linkus iedot?),tad string nav taa klase bez kuras nevar iztikt.
Starp citu - #include <string> .exe failiem maksaa 4KB-mazaam programmaam tas var buut kritiski.Varbut tev vel kadus minusus uzskaitit?Manupraat jau ar shiem pietiek (ja neskaita vel tos,kurus mineeju iperieksheejaa topikaa).
Ja gribi izmanto luudzu savus string.Bet beidz apgalvot ka sprintf utt. ir nepareizi.Tas tak ir bezjeedziigi.Un ka tavuprat izpauzhas baidishanas no STL? _________________ long time; /* know C */
Last edited by elvman on Tue Feb 14, 2006 6:14 pm; edited 1 time in total |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Tue Feb 14, 2006 6:12 pm Post subject: |
|
Un starp citu par to c_srt() <- tas atgriezh pointeri uz buferi (kam ir fiksets lielums).Un ierakstit lielaku datu apjomu shajaa pointerii ir vieglaak kaa vienu pirkstu apchuraat. _________________ long time; /* know C */ |
|
Back to top |
|
|
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Tue Feb 14, 2006 6:36 pm Post subject: |
|
Es vien varu pasmaidīt.
elvman wrote: | Un starp citu par to c_srt() <- tas atgriezh pointeri uz buferi (kam ir fiksets lielums).Un ierakstit lielaku datu apjomu shajaa pointerii ir vieglaak kaa vienu pirkstu apchuraat. |
const char* c_str()
O rly?
Quote: | Te ir buus viens links: |
Tevis padotais links norāda uz javas kaut kādu brīnumu, kurā es īpaši negribu iedziļināties, jo tie nav testa rezulti, kas ir uzņemti, izmantojot std::string STLPort implementāciju. Tu vispār saproti uz ko tu linku padevi? Pie tam tur es neredzu char lala[MAX_SIZE] bufferi.
Quote: | Starp citu - #include <string> .exe failiem maksaa 4KB-mazaam programmaam tas var buut kritiski.Varbut tev vel kadus minusus uzskaitit?Manupraat jau ar shiem pietiek (ja neskaita vel tos,kurus mineeju iperieksheejaa topikaa). |
Lielais mīnus - 4KB atmiņas . Mēn, this is damn serious. :D
Tu esi smieklīgs. Savas zināšanas esi pierādījis "pārpārēm" un negribu ar tevi šo diskusiju turpināt.
Lai nobeigtu ar pozitīvu noti - smaidi! _________________ Screenshot coming when hell freezes over. |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Tue Feb 14, 2006 6:52 pm Post subject: |
|
Njaa te toch ir par ko samidiit.Yeehaaa!Esmu ielicis javas linku.Malacis.
Quote: | const char* c_str()
O rly? |
Bet tu vispaar sajeedz,ko raksti?Tas ir pointeris uz kaadu buferi!Tu saproti?Pateikshu priekshaa-buferi nemeedz buut bez izmeera!Veel nesaprati?String rezervee noteiktu daudzumu atminjas shajaa bufferii.Ja reiz tu ieraksti lielaaku apjomu kaa rezerveets,tad tas ir vairaak kaa skaidri,ka nebuus labs rezultaats.
Un par tiem testiem-tulit iedoshu pareizu linku. _________________ long time; /* know C */ |
|
Back to top |
|
|
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Tue Feb 14, 2006 6:57 pm Post subject: |
|
elvman wrote: | Njaa te toch ir par ko samidiit.Yeehaaa!Esmu ielicis javas linku.Malacis.
Quote: | const char* c_str()
O rly? |
Bet tu vispaar sajeedz,ko raksti?Tas ir pointeris uz kaadu buferi!Tu saproti?Pateikshu priekshaa-buferi nemeedz buut bez izmeera!Veel nesaprati?String rezervee noteiktu daudzumu atminjas shajaa bufferii.Ja reiz tu ieraksti lielaaku apjomu kaa rezerveets,tad tas ir vairaak kaa skaidri,ka nebuus labs rezultaats.
Un par tiem testiem-tulit iedoshu pareizu linku. |
Tu saproti, ka klase string automātiski rezervē pietiekošu atmiņas daudzumu. Ja stringā tiek bāzti vairāk dati nekā dotajā brīdī rezervēts, masīvs tiek automātiski "palielināts". Es gribēju parādīt, ka tas pointeris ir konstants un ka string klases enkapsulācija tev aizliedz piekļūt tam buferim no ārpuses, lai to sacūkātu.
Vai es neteicu, ka negribu turpināt šo diskusiju? Jo blokgalvis paliks blokgalvis, neskatoties ne uz ko, ja viņam pat tiek baroti skaidri argumenti un fakti - viņš nesapratīs, no matter what, lai arī cik cilvēki viņam to neteiktu. Un tāpēc censties kaut ko tev pierādīt ir bezjēdzīgs laika tēriņš.
Āmen. _________________ Screenshot coming when hell freezes over. |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Tue Feb 14, 2006 7:06 pm Post subject: |
|
Un vispaar vajadzeetu beidzot beigt mulkjoties-uztaisiit kopsavilkumu un mest mieru:
char un sprint f plusi:
-atrs (performance nevis programmeeshanas zinjaa)
-neaiznjem tos leikos 4KB
-var pa tiesho stradat ar atminju nevis caur visadiem c_str() (kas arii prasa laiku un kaa jau mineejo ieprieksh-vari paarrakstiit paari bufer robezham).
minusi:
-vairak program rindinju (lidz ar to aiziet vairak laika lai uzprogrammeetu)
-fikseets lielums (kuru char* gadiijumaa var mainiit ar realloc)
string plusi:
-atri programmeejaas (ietaupaas laiks)
-dinamisks buferis
-laikam tomeer iesaaceejiem sho buus vieglaak saprast nekaa char[]
minusi:
-bija man te paris kljumes ar sho (piemeram,nestradaj,ja eksportee klasi no dll (_declspec(dllexport)) un vel 99 warningi,ja liku vinju klasee,kura ir zem citaam klaseem (atkal aizmirsu kaa tas saucaas))
-kriit performance
-liekie 4KB
Viss!
PS. Droshi vien naaksies papildinaat _________________ long time; /* know C */ |
|
Back to top |
|
|
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Tue Feb 14, 2006 7:10 pm Post subject: |
|
Tā jau ir pavisam cita runa.
Skaidri uzrakstīti plusi un mīnusi, tiesa, neiešu skatīties, vai kāds punkts trūkst vai ir par daudz.
Katram savs pielietojums savā specifiskā gadījumā.
Tādai tavai atbildei vajadzēja būt jau sākumā. _________________ Screenshot coming when hell freezes over. |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Tue Feb 14, 2006 7:13 pm Post subject: |
|
Man saak apnikt shitie tavi apvainojumi.Nosakuma noskaidro vai tev ir taisniba un tad stridies.
Izmeegjini sho (un sanjem error,jo buferis par mazu)
Code: | strcpy((char*)aa.c_str(),"asdddddddddddddddddddd"); |
un izmegjini sho (kas errous nemetiis)
Code: | strcpy((char*)aa.c_str(),"a"); |
Nu ko beidzot apravies?
Un sho lietu arii vareetu pievienot pie minusiem. _________________ long time; /* know C */ |
|
Back to top |
|
|
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Tue Feb 14, 2006 7:22 pm Post subject: |
|
Blockheads don't give up.
elvman wrote: | Man saak apnikt shitie tavi apvainojumi.Nosakuma noskaidro vai tev ir taisniba un tad stridies.
Izmeegjini sho (un sanjem error,jo buferis par mazu)
Code: | strcpy((char*)aa.c_str(),"asdddddddddddddddddddd"); |
un izmegjini sho (kas errous nemetiis)
Code: | strcpy((char*)aa.c_str(),"a"); |
Nu ko beidzot apravies?
|
"Nē, neaprāvos". Tu tikai parādīji, ka nemāki nedz programmēt, nedz saproti, kā darbojas std::string klase.
Lieta tāda, ka tu veici nelegālu typecastu, kas atmet const, un, otrkārt, strcpy nav jāizmanto, lai cilvēcīgi std::stringā ievietotu simbolu virkni.
c_str() atgrieztais tips ir const char *, bet tu viņu nokāstoji uz char*, tā ir programmētāja kļūda.
strcpy(( const char*)aa.c_str(),"asdddddddddddddddddddd");
Un pamēģini tagad?
Starp citu, parasti daudzi typecasti kodā norāda par nepilnību programmas designā.
Quote: | Un sho lietu arii vareetu pievienot pie minusiem. |
Smejas. _________________ Screenshot coming when hell freezes over.
Last edited by BHC on Tue Feb 14, 2006 7:27 pm; edited 1 time in total |
|
Back to top |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: Tue Feb 14, 2006 7:27 pm Post subject: |
|
Elvman, lai gan tavaa postaa ierakstiitais kods, protams, izraisiis write erroru, to pie miinusiem nevar likt. Jo tad jau:
Code: |
char aa[2];
strcpy(aa,"asdddddddddddddddddddd");
|
buutu jaaliek pie tevis aizstaaveetaas metodes miinusiem.
Tuklaat, ja mees shaadu apzinaatu erroru radiishanu (nu piedodiet, netiishaam kaut ko taadu nevar izdariit, ar std::string tas ir ) saucam par OO programmeeshanas miinusu, tad tik pat labi var teikt - nelietojiet mainiigos vispaar! Vienmeer varees no'cast'ot uz kaadu neatbilstoshu tipu un izraisiit write erroru :)
BHC, es arii buutu licis galvu kjiilaa, ka tas ir nelegaals type casts, bet tikko man sanaaca to nokompileet gan ar GCC, gan ar Microsoft Studio 2003 kompilatoru...
EDIT: ok sapratu, ka BHC nemaz to neteica my bad
Last edited by GiGa on Tue Feb 14, 2006 7:29 pm; edited 1 time in total |
|
Back to top |
|
|
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Tue Feb 14, 2006 7:28 pm Post subject: |
|
GiGa wrote: | Elvman, lai gan tavaa postaa ierakstiitais kods, protams, izraisiis write erroru, to pie miinusiem nevar likt. Jo tad jau:
Code: |
char aa[2];
strcpy(aa,"asdddddddddddddddddddd");
|
buutu jaaliek pie tevis aizstaaveetaas metodes miinusiem.
Tuklaat, ja mees shaadu apzinaatu erroru radiishanu (nu piedodiet, netiishaam kaut ko taadu nevar izdariit, ar std::string tas ir :) ) saucam par OO programmeeshanas miinusu, tad tik pat labi var teikt - nelietojiet mainiigos vispaar! Vienmeer varees no'cast'ot uz kaadu neatbilstoshu tipu un izraisiit write erroru :)
BHC, es arii buutu licis galvu kjiilaa, ka tas ir nelegaals type casts, bet tikko man sanaaca to nokompileet gan ar GCC, gan ar Microsoft Studio 2003 kompilatoru... |
Nokompilēt var zilus brīnumus.
Like:
int brinums[10];
brinums[1337] = 1;
>:)
Bez kļūdas paziņojuma. Bet tas nenozīmē, ka tas ir pareizi. _________________ Screenshot coming when hell freezes over. |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Tue Feb 14, 2006 7:48 pm Post subject: |
|
Da nejau typecasta ir ta fishka.Dari to pashu kautvai ar memcpy vai vel nezko.Piemeram shada rindinja ari stradas
Code: | strcpy((char*)aa.c_str(),"aaaaaaaaa"); |
Kuraa ir vairaak par vienu simbolu.Un pameegjini no c_str() to simbolu virkni dabuut atpakalj (MessageBox(0,aa.c_str(),"Test",0); ).Nu labi ja tev tik ljoti vajag varu to uzrakstiit taa:
Quote: | memcpy((void*)aa.c_str(),"aaaaaaaaa",10); |
Bet tas ko es gribu pateikt ir-vinjam ir noteiktkts bufera lielums un string nevar kautkaadaa mistiskaa veidaa palielinaat to.Get it? _________________ long time; /* know C */ |
|
Back to top |
|
|
Vecais_Dumais_Laacis Guru
Joined: 29 Jan 2004 Posts: 800
|
Posted: Tue Feb 14, 2006 7:50 pm Post subject: |
|
realloc?
c_str() atgrieztais pointeris man domaat nav garanteets ka saglabaasies viens un tas pats pirms tu saac straadaat ar stringu un kad tu esi veicis izmainjas kas prasa mainiit buferi. ar to jaareekjinaas
vispaar iisti nesaprotu shii fleima jeegu? _________________ ...un ja bites buutu laachi...
Last edited by Vecais_Dumais_Laacis on Tue Feb 14, 2006 7:51 pm; edited 1 time in total |
|
Back to top |
|
|
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Tue Feb 14, 2006 7:50 pm Post subject: |
|
elvman wrote: | Da nejau typecasta ir ta fishka.Dari to pashu kautvai ar memcpy vai vel nezko.Piemeram shada rindinja ari stradas
Code: | strcpy((char*)aa.c_str(),"aaaaaaaaa"); |
Kuraa ir vairaak par vienu simbolu.Un pameegjini no c_str() to simbolu virkni dabuut atpakalj (MessageBox(0,aa.c_str(),"Test",0); ).Nu labi ja tev tik ljoti vajag varu to uzrakstiit taa:
Quote: | memcpy((void*)aa.c_str(),"aaaaaaaaa",10); |
Bet tas ko es gribu pateikt ir-vinjam ir noteiktkts bufera lielums un string nevar kautkaadaa mistiskaa veidaa palielinaat to.Get it? |
* sigh *
You don't get it, don't you?
Smejas.
Es saviem draugiem-programmētājiem šo topiku kā anekdoti sūtīšu. _________________ Screenshot coming when hell freezes over. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|