Advertisement
Hinski2

Untitled

May 24th, 2024
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. # zad1
  2.  
  3. ---
  4.  
  5. **aliasing pamięci** to sytuacja, w której dwa lub więcej wskaźników odwołuje się do tego samego obszaru pamięci
  6.  
  7. **restrict** - mówi kompilatorowi, że wskaźnik jest jedynym wskaźnikiem który wskazuje na dany obiekt
  8.  
  9. <style>
  10. .full-width-table table {
  11. width: 100%;
  12. max-width: fit-content;
  13. margin-left: auto;
  14. margin-right: auto;
  15. }
  16. </style>
  17.  
  18. <div class="full-width-table">
  19.  
  20. <table>
  21. <tr>
  22. <td>
  23.  
  24. ```c
  25. void swap(long *xp, long *yp) {
  26. *xp = *xp + *yp; /* x+y */
  27. *yp = *xp - *yp; /* x+y-y = x */
  28. *xp = *xp - *yp; /* x+y-x = y */
  29. }
  30. ```
  31.  
  32. </td>
  33. <td>
  34.  
  35. ```c
  36. void swap2(long *xp, long *yp) {
  37. long x = *xp, y = *yp;
  38. x = x + y, y = x - y, x = x - y;
  39. *xp = x, *yp = y;
  40. }
  41.  
  42. ```
  43.  
  44.  
  45. </td>
  46. </tr>
  47. </table>
  48.  
  49. </div>
  50.  
  51. gdyby to xp i xp wskazywały na to samo miejsce w pamięci to po swap *xp i *yp były by prówne 0
  52.  
  53. ### przed zmianą
  54.  
  55. ``` nasm
  56. swap:
  57. movq (%rsi), %rax
  58. addq (%rdi), %rax
  59. movq %rax, (%rdi)
  60. subq (%rsi), %rax
  61. movq %rax, (%rsi)
  62. subq %rax, (%rdi)
  63. ret
  64. swap2:
  65. movq (%rdi), %rax
  66. movq (%rsi), %rdx
  67. movq %rdx, (%rdi)
  68. movq %rax, (%rsi)
  69. ret
  70. ```
  71.  
  72.  
  73. ### po zmianie
  74.  
  75. ``` c
  76. void swap(long *restrict xp, long *restrict yp) {
  77. *xp = *xp + *yp; /* x+y */
  78. *yp = *xp - *yp; /* x+y-y = x */
  79. *xp = *xp - *yp; /* x+y-x = y */
  80. }
  81.  
  82. swap:
  83. movq (%rsi), %rax
  84. movq (%rdi), %rdx
  85. movq %rax, (%rdi)
  86. movq %rdx, (%rsi)
  87. ret
  88. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement