Technology sharing

Disce C linguam a VULNUS 33 - Memoria administratione (1)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Vulgate situ
De administratione memoriae C linguae in duas partes divisa est: administratio ratio et programmator usorum manualium. Memoria a systema administrata est maxime variabilium (variabilium localium) intra munus. Haec pars variabilium memoriam intrat cum munus currit ratio operativa ipso facto e memoria exonerat. Memoria manually ab usore tractata est maxime variabilis (variabilitates globales) quae sunt per totum processum progressionis cursus per utentis. Si post usum dimittere neglexeris, memoriam occupabit donec ratio operanti tradetur cum progressio exituum.
2. vacui indicatorum
Spatium in computatorio memoriae singulare signum electronicum assignatur, et area certa memoriae per regulam memoriae inveniri potest. Indicium variabilium typum habere debeo, exempli gratia: int* p=&x; data reponitur. Cum non certus sis qualis notitiae notitiae reposita sit et iustus invenire vis scandalum memoriae electronicae primum, inanis genus monstratorem adhibetur. Indicium genus vacuum dicitur etiam monstratorem genus indefinitum et cuilibet speciei notitiae monstrare potest.
Indicium generis inani converti possunt ad indicium aliarum specierum, et nihil est speciale de usu eorum, nisi quod contentum repositum per modum "*" partiri non potest.
int x = 10;
inanis* p = & x;
int* q = p;
printf("%in", *q);
Attende differentiam inter inane et inane: vacuum est sine typo, et cum usus est ad functionem declarandam, significat nullum pretium reddere;
3. functiones ad memoriam procurationis pertinentia
1、malloc()
Hoc munus separatim memorari potest. m est abbreviatio memoriae, et alloc est abbreviatio destinatio.
Munus: applica ad memoriam continuum impedimentum ab acervo area (admonitio: acervus areae memoriae ab programmate tractandus et post usum destruendus est. Hoc semper memorandum est);
Parametri: Parameter 1 est memoria magnitudinis obstructionum (integrum non-negativum speciei size_t, reditus quantitatis sizeof huius generis est)
Redi valorem: inane monstratorem (quacunque monstratorem specie utimur ad memoriam partita accipiendam utemur)
Ritus: Variabiles usus functionis malloci declarati sunt in acervo area, itaque methodus anonymi declarationis saepe adhibetur, hoc est, loco utendi modum inscriptionis specificarum variabilium, malloc directe reddit monstratorem, ut infra ostendetur:
int* ptr = (int*) malloc(sizeof(int));
Coacta conversio in parenthesi non est necessaria.
Cautiones:
a<stdlib.h>file header, ut solum continet<stdio.h> Componit pulchrum sed non apte, hoc in animo habeto.
b.
c.
d.
e.
f.
2、 memset()
Munus: Tribue valorem initialem cuique byte in memoria claui a monstrante demonstratum.
Parameters: Parameter 1 Indicium monstrans scopum memoriae Parameter 2 adsignatione content (int type ASCII code valorem vel char generis character) Parameter 3 Numerus bytes assignandus (size_t type)
Revertere valorem: Redit monstratorem scopum memoriae monstratum.
Usage: memset(ptrDestMem,'A',sizeof(char)*1024) // Assign character A unicuique byte of a memory block with length of 1024 bytes
Cautiones:
a<string.h> Aliqui compilatores normaliter adhiberi possunt sine hoc titulo capitis inclusi. Si error cursus incidit, placet includere.
b.
c.
2、free()
Munus: Function paribus cum malloc, memoriam a munere malloc datum dimittere ac ne memoriae effluo
Parametri: monstratorem reddidit munus ab malloc
Usu: gratis(ptr);
Cautiones:
a<stdlib.h> noli oblivisci.
b.
c. Optimum est scribere malloc et in paria primum liberum, et deinde alios codices in medio inserere ne obliviscatur.
3、realloc()
re, iterum significatio, allocatio abbreviationis, simul re- positio memoriae
Munus: Mutare magnitudinem datum obstructionum memoriae (incrementum vel decrementum).
Parameters: Parameter I, obstructionum memoriae originalis regula, parameter II, obstructionum amplitudo post augmentum vel decrementum (adhuc size_t type)
Redi valorem: vacuum monstratorem (excipi potest ab originali monstratorem genus variabilis)
Usage: void* newPtr=realloc(ptr, sizeof(int)*10);
Cautiones:
a<stdlib.h> .
b.
c.
4. Application exempla

  1. #include<stdio.h>
  2. #include<stdlib.h> //malloc、free、realloc
  3. #include<string.h> //memset
  4. int main(void)
  5. {
  6. //A void指针的使用
  7. float PI = 3.14159;
  8. void* pPI = &PI;
  9. float r = 2.5;
  10. printf("半径2.5圆的面积:%fn", r * r * *(float*)pPI);//*(float*)pPI—pPI强转为float指针后再解出指向的值
  11. //B malloc、memset、free函数使用
  12. int n = 8;
  13. void* pMyMem = malloc(sizeof(char)*n); //char占1字节,malloc分派n字节的内存,返给void指针
  14. if (pMyMem == NULL)return 0; //若分派内存失败,程序结束
  15. void* myMem2=memset(pMyMem,'B',sizeof(char)*8); //对malloc分派的内存区块个字节都写入字符'B'。
  16. //并用myMem2接收返回的指针
  17. if (pMyMem == myMem2)printf("memset写入区块指针与其返回的指针相同n");
  18. char* transCh = pMyMem; //将void指针转成char型指针
  19. printf("显示写入内容:");
  20. for (int i = 0; i < n; i++)
  21. {
  22. printf("%c ", *transCh); //显示写入的字符
  23. transCh++;
  24. }
  25. printf("n");//换行
  26. free(pMyMem); //释放malloc函数分派的内存
  27. //free(ch); //只有malloc分派的内存才需要释放,且只释放一次(这里会报错)
  28. //C realloc、free函数的使用
  29. int* pMem = malloc(sizeof(int)*5);
  30. if (pMem == NULL)return 0;
  31. for (int i = 0; i < 5; i++) pMem[i] = (i+1)*10;
  32. for (int i = 0; i < 5; i++) printf("%i ", pMem[i]);
  33. printf("n重新增加分派内存后n");
  34. int* newpMem = realloc(pMem, sizeof(int) * 10);
  35. if (newpMem == NULL)return 0;
  36. for (int i = 0; i < 10; i++) newpMem[i] = (i + 1) * 10;
  37. for (int i = 0; i < 10; i++)printf("%i ", newpMem[i]);
  38. free(newpMem); //释放realloc的内存
  39. //free(pMem);//pMem已被重置,不能再释放,此语句会造成运行失败
  40. getchar(); //暂停屏幕
  41. return 0;
  42. }