Возможно ли иметь (фиксированный) массив, который хранит свои элементы в доступном только для чтения сегменте исполняемого файла, а не в стеке? Я придумал этот код, но, к сожалению, он очень негибкий, когда речь идет о добавлении, перемещении или удалении элементов. Как проверить, что строки действительно хранятся в сегменте только для чтения? Я попытался readelf -a файл , но в нем нет строк.
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++;
}
}
Я рассматриваю сценарий, который автоматически генерирует структуру для каждого массива и использует правильную длину для pos и data . Есть ли какие-либо проблемы с точки зрения использования памяти?
Или было бы лучше создать одну структуру (как выше), чтобы она соответствовала всем строкам?