Я использую shared_memory с использованием POSIX ..использованием памяти больше, чем выделено Linux с
Я выделил 4KB, но я могу использовать намного больше, чем 4KB ... это дает мне ошибку сегментации, когда я пишу более 10350 символов в памяти. который равен ~ 10350 байт/1024 = ~ 10 КБ?
Я считаю, что операционная система должна охранять память за такое нарушение, но это позволяет мне? Зачем ?
Производитель Source-код, который используется, чтобы поместить что-то в сегмент разделяемой памяти
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <sys/mman.h>
int main(void)
{
const int size = 4096; //4kb
const char *name = "os";
const char *message = "Put more than 5000 chars it will work perfectly but less than 10350 or something like that";
int shm_fd;
void *ptr;
shm_fd = shm_open(name,O_CREAT | O_RDWR,0666);
ftruncate(shm_fd,size);// set the size to 4kb
ptr = mmap(0,size,PROT_WRITE | PROT_READ,MAP_SHARED,shm_fd,0);
sprintf(ptr,"%s",message);
ptr += strlen(message);
return 0;
Если ваш вопрос: «Почему я могу писать за пределы выделенной мной памяти?», Тогда ответ будет «неопределенным поведением». –
Вы запрашиваете среду времени выполнения, которая управляет памятью для вас и не позволяет использовать несанкционированную память? Другие языки делают это, а не C. C позволяет вам стрелять в ногу. –
неопределенное поведение! он не ответил на мой вопрос. Мне нужно знать, почему это неопределенное поведение происходит? –