Jump to content

Kā konkrēti izpaužas C++ valodas tuvums "dzelžiem".


Recommended Posts

Raimonds1

 

 

Kā arī - pašlaik zinam galveno problēmu, kurai ceram rast risinājumu jau drīzākajā laikā - procesoru ražotāji diemžēl 32 bitu un pat 64  procesoros iebūvē tikai 1 cieto disku

 

Tas galīgi nebij tas ko es tur jautaju.

 

Tas, ko es jautāju bija - ja reiz procesors vienkodola variantā, kā man teica zinošākais biedris, strāda ar visu garo datu blāķi un nekādus 2 bitus nesalīdzina, tad , mans jautājums bija, kā tas ir, ja ir vairākkodolu procesors - vai tad arī katrs no tā kodoliem strādā ar visu garo datu blāķi, jeb ir paredzēta iespēja katram kodolam strādāt ar gabalu no tā garā 32 vai 64 blāķa. 

 

Iespējamās atbildes - jā ir tādas iespējas, nē, nav tādu iespēju, es nezinu, vai kaut ko tādu dara un vēl kaut kāda atbilde.

Link to post
Share on other sites
  • Replies 848
  • Created
  • Last Reply

Top Posters In This Topic

  • Raimonds1

    230

  • binary

    90

  • AndrisBB

    89

  • Mezavecis

    66

Top Posters In This Topic

Popular Posts

es, kā sabiedrības pārstāvis, saku - karogs tavās rokās!!!

Viss, kur klāt piesauc kvantus, ir kruta!

Atbildēšu uz tēmas galveno jautājumu pēc būtības: Programma tiek kompilēta uz procesora instrukcijām. Programma veic darbības ar fizisko atmiņu pa tiešo. Viss, jautājums ir atbil

Posted Images

Tīksmināšanās tā ir tikai Tev ap tā "kritiku", jo Tu neko tālāk par savu smilšu kasti neredzi. Apsēdies, pirms lasi šo šokējošo ziņu - iedomājies, pasaulē bez grāmatvežu skaitlīšiem un līkām web sistēmām eksistē arī citas lietas, kas ir jāprogrammē!

gudrākie no viņiem saprot, ka nav viena universāla rīka visām vajadzībām

uztaisi, lūdzu, iekš C snapdragon iekārtas + kameras vadību ar skārienjutīgo ekrānu un smukām animācijām + video strīmošanu + object tracking + klienta aplikācijas 2 populārākajām mobilajām platformām (drīksti 3, ja vēlies) + klientu portālu datu glabāšanai, sinhronizācijai un loginam ar uzņēmuma SSO. Kad aptirsīsies, tad varbūt sapratīsi, ka katrai valodai sava vieta. Vai arī sāksies atrunas "to es nevaru iekš C uztaisīt, tātad tas sūkā pēc definīcijas".

 

edit: pie prasībām, lūdzu, arī GUI video redaktoru (ar pilnu tačskrīna funkcionalitāti, protams, overlejiem), galeriju ar animācijām un visādi citādi izvirtīgu GUI, šārēšanu uz jūtūbi, feisbuku, instagramu ar lietotāja kontu u.c ērtības. Es tā saprotu, ka 4+ platformām visu iekš C nav problēmu uzmaukt, ne? Vai arī vienā kaut ko taisi, un ar to tava pasaulīte aprobežojas?

Edited by usver
Link to post
Share on other sites

 

 

Šajā piemērā - šo izteikumu īsti nesaprotu

 

Tad tu nevis "gandrīz visu saproti", bet gandrīz neko nesaproti.

 

Pārraksti to piemēru, lai pēc katras rindas izvadās visu mainīgo vērtības, ieskaitot p un *p, un skaities, kas notiekas. Ja tas nepalīdz, tad neviens tev palīdzēt rī nevarēs.

Link to post
Share on other sites
masīvu vai struktūru var padot starp programmas dažādām koda daļām tā, lai tie nav jākopē un var mainīt to saturu? ...Neesmu Java eksperts, bet, cik zinu, tad tas nav iespējams. Pareizi?

 

 

Javā visi masīvi un objekti tiek padoti ar pointeri.  Tie nav jākopē un var mainīt saturu.    Cita lieta, ka tā darīt nav labais stils.

 

Es tāpēc vairs javu nelietoju    :)  var taču programmēt kādā  augstāka  līmeņa valodā,  kur neko tādu darīt nevar    :)

 

Šajā piemērā - šo izteikumu īsti nesaprotu

 

Tas ir vienkārši :   ja p ir pointers (adrese)   tad   *p  ir  tas uz ko pointers norāda,  

Edited by MarisO
Link to post
Share on other sites
Raimonds1

 Abi pointeri p1 and p2 tiek lietoti ar un bez dereferences operatora (*).

 

Programmas rinda ar tā lietošanu ir ļoti atšķiriga no programmas rindas bez tā lietošanas.

 

Ja šis operators ir pirms pointera vārda, tad programmas rinda attiecas uz vērtību (ko glabā kaut kādā adresē, uz ko norāda pointeris)

Ja šī operatora programmas rindā nav, tad tā attiecas uz pašu pointeri kā tādu (tātad adresi, uz ko norāda pointeris)

 

Pareizi?

MarisO pasteidzās.

Edited by Raimonds1
Link to post
Share on other sites
Raimonds1

  • & is the address-of operator, and can be read simply as "address of"
  • * is the dereference operator, and can be read as "value pointed to by"

& kopā ar firstvalue ir operatora adrese?

& kopā ar firstvalue ir firstvalue, kuru tikai vēl ievadīs, adrese, jeb pointeris p1?

Tas ir tā vieta, kur būs nonākt tam ciparam, ko ievadīs?

Edited by Raimonds1
Link to post
Share on other sites

& kopā ar firstvalue ir operatora adrese?

Tev patīk analoģijas? Nu labi - faktiski tavs jautājums ir "vai zieda smarža ir smaržas smarža?"

"&" ir operators, tāpat kā vēl vesela čupa nesaprotamu simbolu - "()", "[]", "->", ".", "!", "~", "++", "--", "+", "-", "*", "/", "%", "<<", ">>", "<", "<=", ">", "<=", "==", "!=", "^", "|", "&&", "||", "?:", "=", "+=", "-=", "*=", "/=", "%=", "&=", "^=", "|=", "<<=", ">>=". Kāda vēl operatoram adrese?

Link to post
Share on other sites

es reiz strādāju projektā,  kur bija uzprogrammēta tāda "konstante" Money.ZERO       :)

un tad viens uzrakstīja kodu,  kas tai izmainīja vērtību, tā "salaužot" visu kodu,  kur tā tika lietota

Link to post
Share on other sites
Raimonds1

Kompilators, pēc 1 rindas nomešanas un neatkarīgi no - ir tur beigās return 0 vai nav, pateica šitā

 

firstvalue is10

secondvalue is20

""""""""""""""""""""""

Process excited with return value 0

Press any key to continue...._


 

 

Kāda vēl operatoram adrese?

 

 

 

address-of operator

 

adress-of operator iztulkoju kā adress of operator 


Varēja pacensties uzrakstīt citādi.


 

 

vienkārši autors visus ir eleganti satrollējis
 

 

Bez manas līdzdalības Jūs esat starā viens par otru un nekādu domstarpību nav.

Link to post
Share on other sites

 

 

Varēja pacensties uzrakstīt citādi.

Varēja arī nepacensties. Tur viss ir normāli uzrakstīts. Lai arī kā uzrakstītu, vienmēr atradīsies kāds, kurš nespēj saprast. IMHO nav nepieciešams sarežģīt pārējiem dzīvi dēļ tādiem, kuri nespēj saprast.

  • Patīk 1
Link to post
Share on other sites
nevertell
Būs labi, es sākšu uzdot aizvien gudrākus jautājumus  

 

Iepriekšējā pieredze rāda, ka jautājumi paliek arvien stulbāki.

 

 

 

Kāda vēl operatoram adrese?
 

 

Acīmredzami, ka autors runā par funkciju pointeri uz atbilstošo operātora implementāciju. Lai varētu palaistuves-laika optimizācijas mašīnkodā, lai spētu effektīvāk izdalīt 64 bitu datu kopu pa 4 kodoliem.

Edited by nevertell
  • Patīk 1
Link to post
Share on other sites
Inspektors Caps

Protams, usver vecā plate bezcerīgi lec uz riņķi un tēmai pieslēgties nespēj. Par to piemēru.. Neviens nezin kas tā tāda "Snapdragon iekārta" tāpat kā arī "Pentium iekārta" vai "ARM iekārta" ir gandrīz neko neizsakošas frāzes. Ja vajag ātri uzcept skaistu GUI ar animācijām un visu ko citu, tad var ņemt talkā, piemēram, Qt bibliotēkas, kas ir priekš gandrīz visām platformām. Tas tā, smilšu kastes profesoram zināšanai. Bet vispār man Tev uz to pat nav jāatbild, jo tēma nav par to vai C var vai nevar paveikt Tavus high-level uzdevumus, bet gan par to vai Java var vai nevar paveikt šajā tēmā aktuālos low-level, kur Tu visu laiku izvairies no atbildes.

 

Bet galvenā debilitāte ir tā, ka šis te tips man piedēvē to, ko pats ir vienkārši safantazējis -  ka es it kā visur bāžot C. Vai mēs esam Android aplikāciju tēmā un es saku, ka tās vajag rakstīt C? Vai tomēr mēs esam C un dzelžu tēmā, kur japeti, usveri un mežaveči, kuri dzelžus nemaz nav kodējuši, mēģina iebāzt savas Javas un citus šiem mērķiem pilnīgi nederīgus un pat neiespējamus murgus? Nevis es, bet Jūs šeit esat tie, kuri beztēmā smirdina par Java un citiem saviem "universālajiem rīkiem visām vajadzībām"!

 

Un, jā, Mežaveci, sūtīt pa COM portu komandas vai komandēt iekārtu caur gatavu bibliotēku nav dzelžu programmēšana, bet gan koda bibliotēku izmantošana.

 

Pascal nodi*sējiem.. Tas tikai norāda uz Jūsu neobjektivitāti. Pascal kā valoda funkcionāli ir apmēram tik pat spējīga kā C. Sintakse tai ir vairāk verbāla, līdzīgi kā Visual Basic, kas nedaudz kaitina lietpratējus dēļ vairāk teksta, bet toties lieliski palīdz iesācējiem, jo tie teksti palīdz izprast. Plus, piemēram Pascal ir pilnībā nodalīta mainīgo definēšana no izpildāmā koda, kas gan disciplinē, gan arī piespiež saprast, ka dati un algoritms ir divas pilnīgi dažādas lietas - atkal vismaz priekš iesācējiem tas ir tikai pluss.

 

Embarcadero tagad Delphi un C++ Builder vides ļoti labi attīsta - ir ieviests Unicode, 64-bit kompilators, GUI komponentes izmanto vektorus un GPU akselerāciju. Tās ir arī cross-platform un šobrīd jau var kompilēt programmas priekš Windows, Mac OS X, iOS un Android. Arī vienu un to pašu programmu visām platformām! Plus tas viss tiek kompilēts uz native izpildāmo kodu, atšķirībā no .NET CLI un Java brīnumiem.

Edited by Inspektors Caps
Link to post
Share on other sites
AndrisBB

Teicu ka nekomentēšu, bet jautājums @@Inspektors Caps, ko tu domā par Rust valodu? Ir doma mazliet pamācīties un paskaties cik "patīkama" tā valoda ir, kas labāks, kas sliktāks par C. Domā ir vērts sākt?

Sāku vienu nelielu projektu, kurš izmanto LPC1768 un FreeRTOS, kurā pāris tāskus varētu uzrakstīt Rust

Edited by AndrisBB
Link to post
Share on other sites
Raimonds1

 

 

Sintakse tai ir vairāk verbāla, līdzīgi kā Visual Basic, kas nedaudz kaitina lietpratējus dēļ vairāk teksta, bet toties lieliski palīdz iesācējiem, jo tie teksti palīdz izprast. Plus, piemēram Pascal ir pilnībā nodalīta mainīgo definēšana no izpildāmā koda, kas gan disciplinē, gan arī piespiež saprast, ka dati un algoritms ir divas pilnīgi dažādas lietas - atkal vismaz priekš iesācējiem tas ir tikai pluss.

 

Man jau nu pilnīgi noteikti. 


Uz gatavu produktu orientētiem - produkts ir arī diskusija kā tāda un labāki skaidrojumi par līdz šim pieejamiem. Mēs te varam šos skadrojumus producēt steriem vai arī to nedarīt un kasīties.

Kur tad ir tās daudzas kvaliitatīvās diskusijas par C un C++ valodām? Pointeri latviešu guglē ir adreses par suņiem.

http://www.latviangundogs.org/new/lv/musu-suni/anglu-pointeri

stringi C valodā


Kas tas ir, ka kompileris tos vecos piemērus, kas rakstīti kā paraugi, met atpakaļ?


 

 

Teicu ka nekomentēšu,

 

Man Tavi komenti netraucē.

Link to post
Share on other sites
nevertell

 

 

Tādēļ arī jautājuma būtība bija par valodu - kā Java kodā masīvu vai struktūru var padot starp programmas dažādām koda daļām tā, lai tie nav jākopē un var mainīt to saturu? C/C++ to var izdarīt vieglāk par vieglu - padodot pointeri, kas tiešām nenoslogo faktiski necik! Neesmu Java eksperts, bet, cik zinu, tad tas nav iespējams. Pareizi?
 

Nepareizi, Javā viss ir pass-by-reference, neskaitot primitīvus. Primitīvus vajag 'aptīt' ar objektu, lai tos varētu padot kā referenci.

@@AndrisBB, ja nopietni pieķersies Rūsai, tad brīdinu, ka no sākuma kompilatora īdēšana var baigi izbesīt. Bet nepais daudz laika, kad kompilātors būs kļuvis par tavu labāko draugu. Un par embedētajām sistēmām - skaties uzmanīgi, jo Rūsa ģenerē LLVM bitkodu, tā kā tehniski kods strādās uz visa, ko atbalsta LLVM, taču standarta bibliotēka gluži visam nav vēl sarakstīta. 

Es rūsā tik vienu nopietnu projektu esmu uzrakstījis, nopietnu nevis funkcionalitātes dziļumā, bet ātrdarbības ziņā. C/C++ tagad vairs gribās aiztikt tikai tur, kur nekas cits vienkārši nav iespējams, i.e. linux kernelis un citas vietas. 

Link to post
Share on other sites
AndrisBB

 

 

taču standarta bibliotēka gluži visam nav vēl sarakstīta.
 

A kā ir ja izmanto parastās C redlib vai newlib?, Jo tikuntā nāksies portēt visādus 'read', 'write', 'malloc' utt, neesu pētijis kā portēšana darbojas Rust, bet vismaz ar newlib tas ir vienkārši. Bet atkal jauzmanto C bibliotēkas, tad zūd jēga visam Rust. Kaugan varbūt var pņemt kautko no Rust un kas nedarbojas to no C?  

Iespējams sarakstiju kautkādu murgu, jo ar Rust vēl neesu pat rindiņu uzrakstijis, varbūt jāsāk uz desktopa

 

Kautkas izskatās tiek darīts lietas labā šinī projektā https://zinc.rs/

Link to post
Share on other sites

Piemēram, cilvēks stāsta, ka ir augstākās matemātikas profesors, bet tad uzraksta tādu lažu, kas atklāj, ka viņš nemaz nesaprot visparastāko reizināšanu.

Jau iepriekš rakstīju, ka mana implementācija izpildās korekti (kas ir galvenais), uzlabot varu, bet man nav laika regulāri nakts vidū sēdēt un muldēt, cik visi stulbi vai netraucēti nodarboties ar vaļaspriekiem.

kāds tests feiloja? piemēri atgrieza korektas vērtības. neskatoties uz to, ka c++ es padsmit gadus arī neesmu programmējis.

uzrakstīju fiksi algoritmu. darba dienas vidū. vidē, ko nelietoju. uzlabot varu, operācijas samazināt varu, mainīgos noīsināt arī. arī inlainā var pierakstīt klāt "optimālāk". bet priekš tā laiks vajadzīgs.

Tev, acīmredzot, nepieleca. Joprojām - visi apkārt stulbi, nekā nejēdz, odna ja umnaja, visi lo.hi. Kas rada motivāciju kopš septembra (!!!) nākt un pašrealizēties lamājoties, jo pasaulē taisnības neesot.

Tev ir "projekti, algas", bet sajēgas nav

 

Lūk - pirms dažām dienām Raimondam ieminējos par multitredotu aplikāciju (ne)ieguvumiem no reģistru operācijām. Tu atkal sāki nekonstruktīvi psihot, laikam sakarā ar to, ka esmu atļāvies tādas lietas komentēt. Paskatījos bildīti un atcerējos jaunību:

x86-registers.png

Vakar bija laiks pēc darba - bērni veseli, darbā mazliet atelpa. Vakarā aizgāju uz kafejnīcu (mājas programmēties nav iespējams), sporta pēc uzrakstīju kodu, kas bīda bitus. Referencei atstāju tavējo - ar bitwise AND un OR. Asmā tas viss noreducējas uz šiftu caur Carry flag, nekādi AND un OR tur nav patiesībā vajadzīgi.

#include <bitset>
#include <iostream>

using namespace std;

unsigned short int rev_opt(unsigned short int given) {
    unsigned short int returnValue = 0;
    for (int i=0; i<16; i++) {
        returnValue <<= 1;
        returnValue |= given & 1;
        given >>= 1;
    }
    return returnValue;
}

unsigned short int rev_opt2(unsigned short int given) {
	unsigned short int result;

	asm {
		// better save the register state - just in case
		push eax		;
		push ebx		;
		push ecx;		;

		// start the thing - initialize variables
		mov ax, given	; load the number into ax [16 bits == 2 bytes]
		mov cx, 0		; initially 0
		mov bx, 0		; same thing
		
		cont:
			add cx, 0x01	;
			shr ax,  0x01	; rotate left by X places
			rcl bx			;
			cmp cx, 0x10	; reached end?
			je exits 		; yes
			jmp cont 		; no
		exits:
			mov result, bx	; save the result in variable			
			// better restore the state
			pop ecx			; restore state
			pop ebx;
			pop eax;
	}
	return result;
}

void reverseAndDisplay(unsigned short numba) {
	bitset<16> output = numba; // for output
	cout << output << " <-- binary [" << output.to_ulong() << "]" << endl;
	// reverse
	output = rev_opt2(numba);
	cout << output << " <-- reversed [" << output.to_ulong() <<"]" << endl;
	return;
}

int main() {
	reverseAndDisplay(123);
	reverseAndDisplay(456);
}

kompilējas un izpildās šādi:

g++ -Wall -m32 -fasm-blocks convert.cpp -o one.o && ./one.o
0000000001111011 <-- binary [123]
1101111000000000 <-- reversed [56832]
0000000111001000 <-- binary [456]
0001001110000000 <-- reversed [4992]

visa algoritma būtība - 2 rindiņas, viss pārējais ir tikai boilerplate code.

shr ax, 0x01

rcl bx

Edited by usver
Link to post
Share on other sites

Pie kaut kāda bitu skaita hardkodētie šifti un hardkodētas maskas kļūst nesalīdzināmi labāki par ciklu. Un tas ir daudz interesantāk nekā "naivais variants" ar ciklu, kuru var uzrakstīt gandrīz jebkurš.

Link to post
Share on other sites

protams, taču mēs te mērījāmies ar cpu ciklu ietaupīšanu tieši 2 baitiem :)

Edited by usver
Link to post
Share on other sites

Nē, tieši 2 baitus izvēlējies tu pēc tam, kad nespēji izpildīt zemāk citēto ;)

 

 

usver, tagad pēc tā garā pentera uzraksti piemēru, kā 256 bitu lielā mainīgajā (pieņemsim, ka tas ir 256 bitu integeris) samainīt vietām bitus. Tā, lai pirmais būtu pēdējais, otrais - pirmspēdējais utt.
Link to post
Share on other sites

Dārgie skatītāji, ēterā "visi l.ohi, nekā nemāk" 10493. sērija "Intedžeri - mutanti". Spraigi notikumu pavērsieni, jaunu datu tipu meklēšana, pakaļdzīšanās un intriga - vai kompilators tam piekritīs? Palieciet pie ekrāniem lai uzzinātu notikumu atrisinājumu!

 

brutāls variants - ielasīt max reģistrā ietilpstošo porciju un atkārtot (4x) to pašu. rakstot porcijas citur atmiņā, sākot no pēdējās.

labāks variants, kas pie 256 varētu sākt atmaksāties pie retinātiem bitiem - meklēt ar bsf. vai arī lietot hārdkodētus šiftus un maskas.

Edited by usver
Link to post
Share on other sites

Izlien tak no kastes.

 

Jā, zinies, ikdienā šad tad sanāk pastrādāt arī ar lielākiem skaitļiem - nevis 16bit vai 32bit un pat ne ar 64bit, bet, piemēram, ar 128bit, 1024bit, 2048bit, 4096bit u.c. Jā, protams, tie nav gluži "natīvie skaitļi" - tās ir lielo skaitļu reprezentācijas ar kaut kādu nebūt libu palīdzību, kur libs prot arī reizināt tos skaitļus, dalīt, saskaitīt, xorot, shiftot, kāpināt utt utjp.

 

Šādā vidē jau tie ir nevis "intedžeri - mutanti", bet visparastākie integeri, kur "integer" nozīmē "a number that can be written without a fractional component", nevis "a numbe that can fit into CPU register".

 

Tādam 4096bit integerim jau ir "mazliet svarīgi", vai viņu shiftos 4k reižu (un ne tikai viņu, bet arī visu pārējo, kas tur pa starpu aprēķinos tiek izmantots), vai darīs kaut ko "mazliet optimālāku". Bet nu jā - javas kastē jau līdz tādam līmenim nav nepieciešams aizdomāties, tur visi tik aizņemti, ka optimālos straightforward risinājumus atstāj neko nezinošajiem un neprotošajiem :whistle2:

Link to post
Share on other sites
Mezavecis

Dzelža definīciju studijā. Man dzelzis ir tas, kas dara tam paredzētās darbības, līdz ar to kompis, mikrene vai kāds cits verķis, kas sūta komandas, pieder pie dzelša integrētā vai neintegrētā varianti. Tas, ka vairāk standarta veikalā nopērkamiem produktiem neesi redzējis, nenozīmē, kad tagad esi baigais eksperts. Vēlreiz uzveru, ka cilvēks, kurš nekad programmēšanas kantorī pat degunu iebāzis, pat teorētiski nevar saukt citus par debiliem. Nu nav tu programmētājs, bet fanātisks tips un apsēsts ar cilvēku apkakāšanu. Acīmredzot atejā par ilgu sēdējis.

 

Mežaveci, sūtīt pa COM portu komandas vai komandēt iekārtu caur gatavu bibliotēku nav dzelžu programmēšana, bet gan koda bibliotēku izmantošana.
Link to post
Share on other sites

3 variantus pieminēju - tāpat www.vissirslikti.lv :)


 

 

ikdienā šad tad sanāk pastrādāt arī ar lielākiem skaitļiem - nevis 16bit vai 32bit un pat ne ar 64bit, bet, piemēram, ar 128bit, 1024bit, 2048bit, 4096bit u.c

malacis, super, man prieks par Tevi!  :thumbsup:  

Link to post
Share on other sites
Raimonds1

Nedaudz koda par pointeriem, kā tie būtu jāmāca. Vispirms - visi tie īsie piemēri, kur 4. adrese aptinusies ap mainīgo pieci ir jāmaina uz ko šādu. Vispirms apstāsta, ka viss ir skaitļi, lieli un mazi un dažādu tipu un no reāla datora izdabū viņu adreses.

#include<stdio.h>

main()
{
int a;
unsigned int b;
short int c;
unsigned short d;
long int e;
unsigned long int f;
float g;
double h;
char i;
unsigned char j;
bool k;


printf("adress of a is %u \n", &a);
printf("adress of b is %u \n", &b);
printf("adress of c is %u \n", &c);
printf("adress of d is %u \n", &d);
printf("adress of e is %u \n", &e);
printf("adress of f is %u \n", &f);
printf("adress of g is %u \n", &g);
printf("adress of h is %u \n", &h);
printf("adress of i is %u \n", &i);
printf("adress of j is %u \n", &j);
printf("adress of k is %u \n", &k);

}

Tātad - vispirms izplājam visus iespējamos datu tipus un dabūjam REĀLU  atminas adresi, kur tie tiks glabāti.


Dabūjam atbildi

Adress of a = 11278545

Adress of b = 11276859

un tā tālāk, saprotam, ka mēs esam to atmiņas gabalu rezervējuši

Iegūstam reālus, lielus skaitlus, nevis kaut kādus izdomātus.


Līdzīgas rindiņas viena pie otras pasargā iesācēju no tā, ka tur sākumā ir visādi char, ej nu sazini, cipars vai simbols, amperrsandi - &, 1 un 2 kas ir viens ap otru aptinušies un nav skaidrs, kurš no kura izriet.


Tad ar kādam 10 starprezultātu lapām, kuras visas saglabā, nonāk pie šitā


#include<stdio.h>
main()
{
int a= 56; // veerts izmeginaat ar un bez inicializaacijas vert pieskirasanas
int a2= 28;//lai nejauktu galvu, a2 atbilstigs pointerim p2
float g= 4.65;

printf("adress of a is %u \n", &a);
printf("adress of a2 is %u \n", &a2);// te var speciali atstaat a1 lai kompilatros pasaka, ka taads nav dekalreets
printf("adress of g is %u \n", &g);

int *p1;
p1 = &a;

int*p2 = &a2;

float*p3 = &g;


printf (" p1 veertiiba ir %u", p1);
printf (" a veertiiba ir %d", *p1);


printf (" p2 veertiiba ir %u", p2);
printf (" a2 veertiiba ir %d", *p2);


printf (" p3 veertiiba ir %u", p3);
printf (" g veertiiba ir %d", *p3);
}

Un vēlāk - pie šitā


#include<stdio.h>
main()// izgatavots balstoties uz juutuba watch?v=TFTpRjPcoUs
{
int a= 56; // veerts izmeginaat ar un bez inicializaacijasvert pieskirasanas
int a2= 28;//lai nejauktu galvu, a2 atbilstigs pointerim p2
float g= 4.65;

printf("adress of a is %u \n", &a);
printf("adress of a2 is %u \n", &a2);// te var speciali atstaat a1 lai kompilatros pasaka, ka taads nav dekalreets
printf("adress of g is %u \n", &g);

int *p1;
p1 = &a;

int*p2 = &a2;

float*p3 = &g;


printf (" p1 veertiiba ir %u", p1 );
printf (" a veertiiba ir %d", *p1 );


printf (" p2 veertiiba ir %u", p2 );
printf (" a2 veertiiba ir %d", *p2 );


printf (" p3 veertiiba ir %u", p3 );
printf (" g veertiiba ir %d", *p3 );

printf ( " a un a2 summa ir %d", a + a2 );//nekaadugbetcarvaireturn0nevajag 11min43sek

printf ( " a un a2 summa ir %d", *p1 + *p2 );



}

Pa vidu tam visam var izeksperimentēties, ko kompilē kompilators un ko ne, kas ir , ja sataisa 1 simbola atstarpes starp iekavām un citiem simboliem, konstatē, ka ar parauga getchar beigās nekas nenoptiek, ar return 0 notiek un bez return 0 arī. Lāa rī to, ja speciāli ielaiž kļūdas pointera aprakstā vai mainigā simbolā, ko reāli izdrukā uz ekrāna. Kā arī parleicinās, ka var atstat nevaajdzigu materiālu programa un pec ta aizvākšanas programma veic to pašu darbu. Protams, pieļauj visas sākuma kļūdas, aizmirstos ; un ".

 

Iedvesmu ieguvu no šiem diviem 1 2

 

youtube.com/watch?v=TFTpRjPcoUs

 

 

youtube.com/watch?v=Rxvv9krECNw#t=2324.338175

Edited by Raimonds1
Link to post
Share on other sites

labaak

// start the thing - initialize variables
mov ax, given 
mov cx, 10h
xor bx, bx 


cont:
shr ax, 1 ; rotate left by X places
rcl bx
dec cx
jnz cont

mov result, bx ; save the result in variable
// better restore the state

 

 

ieminējos par multitredotu aplikāciju (ne)ieguvumiem no reģistru operācijām.
 

 

pastāsti mums arī par to.    kādi tie ieguvumi ir?

  • Patīk 1
Link to post
Share on other sites

Lūdzu!

un te.

 

dažos vārdos - sinhronizācija ir pārāk piņķerīga lieta lai gaidītu, kad asinhroni tredi beidzot savāksies vienkopus un varēs sakombinēt baitus un beidzot izpildīt kādu darbību, (ah + al XOR bh + bl), ietaupot komandas.

ieguvums no 1 ietaupītas darbības nav tās gaidīšanas un sinhronizācijas vērts.

un tredi katrs savu kodolu, visticamāk, izmanto, tāpēc mēģināt kaut ko sakombinēt kopīgu pamatkomandu līmenī nav vērts. labāk loģiski sadalīt uzdevumu tā, lai katrs kodols (vai pat node distribūtētā sistēmā) dara savu lietu, sadalot slodzi.

Edited by usver
Link to post
Share on other sites
nevertell
Iegūstam reālus, lielus skaitlus, nevis kaut kādus izdomātus.

Tu domā, ka modernā OS tie skaitļi ir reāli

 

 

 

dažos vārdos - sinhronizācija ir pārāk piņķerīga lieta lai gaidītu, kad asinhroni tredi beidzot savāksies vienkopus un varēs sakombinēt baitus un beidzot izpildīt kādu darbību, (ah + al XOR bh + bl), ietaupot komandas.
 

 

Jā jā, sinhronizācija ir piņķerīga. Par paralēli izpildāmu MapReduce esi dzirdējis ? Ja ir gana daudz ievades datu, tad tas viss atmaksājas.

Edited by nevertell
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...