Autor
|
Tema: Como manejar un Buffer de 11000 caracteres ? (Leído 1,935 veces)
|
bash
Desconectado
Mensajes: 258
|
Buenas a todos !!! tengo una duda teorica estoy recibiendo un buffer que tienes mas 11000 caracteres pero el maximo de buffer que puedo leer es de 8000 caracteres o valores y me gustaria saber que manera es eficiente y efectiva para poder recibir ese buffer ? solo es teoria si le sale algo practico esta bien pero me guistaria entender esto !! modificado: #include<fcntl,h> char buffer[1024]; int main() { int fd = open("buffe.cier", O_WRONLY); if(fd < 0) { ///error }else{ ////aqui la verdad no me llega como llenar el buffer //// pense usar un while o un for para ir leyendo //// pero es un sistema empotrado ////intente leer 1024 a 1024 ////2048 a 2018 ///// y tambien el buffer completo /// 11700 pero nada ///////opiniones!!! please } return 0; }
Gracias por adelatado Mod: Obligatorio el uso de etiquetas GeSHi
|
|
« Última modificación: 27 Mayo 2015, 19:12 pm por #!drvy »
|
En línea
|
gracias por responder mis dudas
|
|
|
Peregring-lk
Desconectado
Mensajes: 50
|
¿Pero necesitas almacenar esos 11000 carácteres de golpe? ¿O puedes almacenarlos en paquete, procesar cada paquetes, descartarlo, y reutilizar el búfer para el siguiente grupo?
Pero si debes guardar esos 11000 carácteres de golpe, tendrías que buscar un sitio donde "te quepa". Podrías considerar guardar dicho búfer como variable local en vez de global, o quizás que el búfer esté en memoria dinámica. Quizás es la única forma, y 11000 carácteres, que no llega ni a 11KB, no es problema para la memoria dinámica.
Tal y como dije en otro post, la memoria de un programa está divida en secciones: las variables globales inicializadas van a un sitio (.glob), las variables globales no inicializadas (como tu búfer), van a otro (y se inicializan a cero), las variables locales, a otro (stack), y las variables dinámicas, a otro (heap).
Y cada arquitectura/entorno puede tener limitaciones diferentes sobre el tamaño de cada una de éstas secciones. Pero normalmente, un programa tiene tanta memoria (en suma) como direcciones de memoria que el SO pueda manejar (si un SO puede manejar hasta 4GB de RAM, pues tu programa también). Y normalmente, las secciones .globl, stack, .rodata y demás, suelen ser secciones relativamente pequeñas, mientras que el heap (montículo) es capaz de albergar todo lo demás.
Si tu arquitectura puede manejar 2GB de RAM, pero .globl, .rodata, stack y el resto de secciones "no dinámicas" ocupana 50 MB, pues el montículo podrá albergar hasta 1GB y 950MB de memoria.
En conclusión, mira las limitaciones de memoria de tu arquitectura en la documentación pertinente para ver qué cabe donde.
|
|
|
En línea
|
|
|
|
|
|