summaryrefslogtreecommitdiff
path: root/src/ralloc.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2012-02-01 18:51:20 +0200
committerEli Zaretskii <eliz@gnu.org>2012-02-01 18:51:20 +0200
commit78cef8778985b15bcb16a9ed9604395b3ab6b9c3 (patch)
tree80aa81f20bb03a441d288052a311a423f7f5391e /src/ralloc.c
parent90586172568f5a4e5d4b62f59deb1dfb69e8b4f5 (diff)
downloademacs-78cef8778985b15bcb16a9ed9604395b3ab6b9c3.tar.gz
Speed up insertion of subprocess output on MS-Windows.
src/ralloc.c (resize_bloc, r_alloc_sbrk): Don't call memmove if its first 2 arguments are identical. This makes inserting large output from a subprocess an order of magnitude faster on MS-Windows, where all sbrk'ed memory is always contiguous.
Diffstat (limited to 'src/ralloc.c')
-rw-r--r--src/ralloc.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/ralloc.c b/src/ralloc.c
index 13587b9ffd4..896ad9f3155 100644
--- a/src/ralloc.c
+++ b/src/ralloc.c
@@ -636,7 +636,8 @@ resize_bloc (bloc_ptr bloc, SIZE size)
}
else
{
- memmove (b->new_data, b->data, b->size);
+ if (b->new_data != b->data)
+ memmove (b->new_data, b->data, b->size);
*b->variable = b->data = b->new_data;
}
}
@@ -647,7 +648,8 @@ resize_bloc (bloc_ptr bloc, SIZE size)
}
else
{
- memmove (bloc->new_data, bloc->data, old_size);
+ if (bloc->new_data != bloc->data)
+ memmove (bloc->new_data, bloc->data, old_size);
memset ((char *) bloc->new_data + old_size, 0, size - old_size);
*bloc->variable = bloc->data = bloc->new_data;
}
@@ -663,7 +665,8 @@ resize_bloc (bloc_ptr bloc, SIZE size)
}
else
{
- memmove (b->new_data, b->data, b->size);
+ if (b->new_data != b->data)
+ memmove (b->new_data, b->data, b->size);
*b->variable = b->data = b->new_data;
}
}
@@ -816,7 +819,8 @@ r_alloc_sbrk (long int size)
header. */
for (b = last_bloc; b != NIL_BLOC; b = b->prev)
{
- memmove (b->new_data, b->data, b->size);
+ if (b->new_data != b->data)
+ memmove (b->new_data, b->data, b->size);
*b->variable = b->data = b->new_data;
}
@@ -862,7 +866,8 @@ r_alloc_sbrk (long int size)
for (b = first_bloc; b != NIL_BLOC; b = b->next)
{
- memmove (b->new_data, b->data, b->size);
+ if (b->new_data != b->data)
+ memmove (b->new_data, b->data, b->size);
*b->variable = b->data = b->new_data;
}
}