1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-18 11:50:38 -08:00

Do not allocate huge temporary memory areas and objects while encoding

for file I/O, thus reducing an enormous memory usage for large buffers.
See http://lists.gnu.org/archive/html/emacs-devel/2013-10/msg00180.html.
* coding.h (struct coding_system): New member raw_destination.
* coding.c (setup_coding_system): Initialize it to zero.
(encode_coding_object): If raw_destination is set, do not create
dst_object.  Add comment.
* fileio.c (toplevel): New constant E_WRITE_MAX.
(e_write): Do not encode more than E_WRITE_MAX characters per one loop
iteration.  Use raw_destination if E_WRITE_MAX characters is encoded.
This commit is contained in:
Dmitry Antipov 2013-10-08 10:40:09 +04:00
parent b7d5bd823c
commit f849808191
4 changed files with 57 additions and 8 deletions

View file

@ -512,6 +512,10 @@ struct coding_system
`charbuf', but at `src_object'. */
unsigned chars_at_source : 1;
/* Nonzero if the result of conversion is in `destination'
buffer rather than in `dst_object'. */
unsigned raw_destination : 1;
/* Set to 1 if charbuf contains an annotation. */
unsigned annotated : 1;