Öğelerini, yürütülebilirde salt okunur parçada depolayan ve yığında olmayan (sabit) bir dizinin olması mümkün mü? Bu kodla geldim ama maalesef eşya ekleme, taşıma veya silme söz konusu olduğunda ne yazık ki çok zor değil. Dizelerin gerçekten salt okunur segmentte depolandığını nasıl doğrularım? Ben readelf- dosyasını denedim ancak dizeleri listelemiyor. Sabit dizi dizileri
typedef struct {
int len;
int pos[100];
char data[500];
} FixedStringArray;
const FixedStringArray items = {
4,
{ 9, 14, 19, 24 },
"LongWord1Word2Word3Word4"
} ;
char* GetItem(FixedStringArray *array, int idx, int *len) {
if (idx >= array->len) {
/* Out of range */
*len = -1;
return NULL;
}
if (idx > 0) {
*len = array->pos[idx] - array->pos[idx - 1];
return & array->data[array->pos[idx - 1]];
}
*len = array->pos[idx];
return & array->data[0];
}
void PrintItem(FixedStringArray array, int idx) {
int len;
char *c;
int i = 0;
c = GetItem(&array, idx, &len);
if (len == -1) return;
while (i < len) {
printf("%c", *c);
*c++;
i++;
}
}
otomatik olarak her bir dizi için bir yapı oluşturur ve
pos ve
veri için doğru uzunluğa kullanan bir komut dosyası düşünüyorum. Bellek kullanımı ile ilgili endişeler var mı? Ya da tüm dizeleri sığdırmak için bir yapı (yukarıdaki gibi) oluşturmak daha iyi olurdu?
Evet, eski de iyi olurdu. GCC bunu tüm const değişkenleri için varsayılan olarak zaten yapmamalı mı? – user206268