You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
1 - hizasız olarak hesaplanan pointer'ı hizalayarak, her sbrk çağrısında n < 8 byte alanı israf etmek.
2 - daha zorlama bir çözüm olmakla birlikte: hizasız döndürülen pointer'ı malloc ve free içinde göz önünde bulundurarak gösterdiği alana parçalı load/store yapmak.
The text was updated successfully, but these errors were encountered:
normalde sbrk ile ilgili bir hizalama kısıtı yok. ama malloc 8 byte hizalı döndürüyor.
#include<unistd.h>#include<stdio.h>#include<stdlib.h>intmain() {
void*p;
p=malloc(1);
printf("1 byte mallocd: %p\n",p);
p=malloc(1);
printf("1 more byte mallocd: %p\n",p);
int*q= (int*)(((char*)p)+1);
printf("p + 1 casted to int pointer: %p\n",q);
inta=1;
*q=a;
p=sbrk(0);
printf("Initial brk: %p\n", p);
p=sbrk(1); // Increase the brk (returns OLD brk!)p=sbrk(0); // Get the new brkprintf("New brk: %p\n", p);
return0;
}
koduyla denedğimide çıktısı:
> gcc main.c ; ./a.out
1 byte mallocd: 0x556830a732a0
1 more byte mallocd: 0x556830a736d0
p + 1 casted to int pointer: 0x556830a736d1
Initial brk: 0x556830a94000
New brk: 0x556830a94001
Hizasız bir poniter'ı int poniter'ına cast edince hizalama yapıyor mu diye de baktım. yapmıyormuş.
14b7dc6'te sbrk 8 byte hizalı döndürecek diye değiştirmiştim. geçici bir çözüm sağlayacak, belki daha sonra hizalama görevini malloc'a alırım, standard kütüphane'de (malloc ve sbrk'in gerçeklendiği libc) olduğu gibi.
bu arada bizde hizasız durumda exception veriyor ama bu işine yarar mı?
bence evet. çünkü kodun temiz olduğundan emin olmamızı sağlar. hem spike'ta da yanlış hatırlamıyorsam hata veriyordu
iki mümkün çözüm var:
1 - hizasız olarak hesaplanan pointer'ı hizalayarak, her
sbrk
çağrısından < 8
byte alanı israf etmek.2 - daha zorlama bir çözüm olmakla birlikte: hizasız döndürülen pointer'ı malloc ve free içinde göz önünde bulundurarak gösterdiği alana parçalı load/store yapmak.
The text was updated successfully, but these errors were encountered: