dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Māca citus, part 1.
Goto page Previous  1, 2, 3, 4  Next
 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: 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. Smile
_________________
Screenshot coming when hell freezes over.
Back to top
View user's profile
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: 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
View user's profile Visit poster's website
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: 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
View user's profile Visit poster's website
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: 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:

Very Happy
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 Very Happy. 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
View user's profile
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: 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
View user's profile Visit poster's website
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: 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
View user's profile
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: 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
View user's profile Visit poster's website
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: 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ā. Wink
_________________
Screenshot coming when hell freezes over.
Back to top
View user's profile
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: 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
View user's profile Visit poster's website
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: Tue Feb 14, 2006 7:22 pm    Post subject:

Blockheads don't give up. Very Happy
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
View user's profile
GiGa
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 25 Sep 2003
Posts: 887

PostPosted: 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 Smile ) 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 Wink my bad


Last edited by GiGa on Tue Feb 14, 2006 7:29 pm; edited 1 time in total
Back to top
View user's profile Send e-mail
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: 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
View user's profile
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: 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
View user's profile Visit poster's website
Vecais_Dumais_Laacis
Guru
Guru


Joined: 29 Jan 2004
Posts: 800

PostPosted: 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
View user's profile
BHC



Joined: 31 Jan 2006
Posts: 81

PostPosted: 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. Very Happy
_________________
Screenshot coming when hell freezes over.
Back to top
View user's profile
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Goto page Previous  1, 2, 3, 4  Next
Page 2 of 4

 
Jump to:  
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