Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenlib/BLI_system.h4
-rw-r--r--source/blender/blenlib/intern/system.c19
-rw-r--r--source/blender/blenloader/intern/versioning_defaults.c2
3 files changed, 24 insertions, 1 deletions
diff --git a/source/blender/blenlib/BLI_system.h b/source/blender/blenlib/BLI_system.h
index 93ad0e1e70f..f4c0399e959 100644
--- a/source/blender/blenlib/BLI_system.h
+++ b/source/blender/blenlib/BLI_system.h
@@ -41,6 +41,10 @@ char *BLI_cpu_brand_string(void);
*/
void BLI_hostname_get(char *buffer, size_t bufsize);
+/* Get maximum addressable memory in megabytes. */
+size_t BLI_system_memory_max_in_megabytes(void);
+int BLI_system_memory_max_in_megabytes_int(void);
+
/* getpid */
#ifdef WIN32
# define BLI_SYSTEM_PID_H <process.h>
diff --git a/source/blender/blenlib/intern/system.c b/source/blender/blenlib/intern/system.c
index d23b45a3937..3348912f02a 100644
--- a/source/blender/blenlib/intern/system.c
+++ b/source/blender/blenlib/intern/system.c
@@ -18,10 +18,12 @@
* \ingroup bli
*/
+#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include "BLI_utildefines.h"
+#include "BLI_math_base.h"
#include "BLI_system.h"
#include "BLI_string.h"
@@ -189,3 +191,20 @@ void BLI_hostname_get(char *buffer, size_t bufsize)
}
#endif
}
+
+size_t BLI_system_memory_max_in_megabytes(void)
+{
+ /* Maximum addressable bytes on this platform.
+ *
+ * NOTE: Due to the shift arithmetic this is a half of the memory. */
+ const size_t limit_bytes_half = (((size_t)1) << ((sizeof(size_t) * 8) - 1));
+ /* Convert it to megabytes and return. */
+ return (limit_bytes_half >> 20) * 2;
+}
+
+int BLI_system_memory_max_in_megabytes_int(void)
+{
+ const size_t limit_megabytes = BLI_system_memory_max_in_megabytes();
+ /* NOTE: The result will fit into integer. */
+ return (int)min_zz(limit_megabytes, (size_t)INT_MAX);
+}
diff --git a/source/blender/blenloader/intern/versioning_defaults.c b/source/blender/blenloader/intern/versioning_defaults.c
index 61623a0cade..0e5e37e54a9 100644
--- a/source/blender/blenloader/intern/versioning_defaults.c
+++ b/source/blender/blenloader/intern/versioning_defaults.c
@@ -96,7 +96,7 @@ void BLO_update_defaults_userpref_blend(void)
/* Only enable tooltips translation by default,
* without actually enabling translation itself, for now. */
U.transopts = USER_TR_TOOLTIPS;
- U.memcachelimit = 4096;
+ U.memcachelimit = min_ii(BLI_system_memory_max_in_megabytes_int() / 2, 4096);
/* Auto perspective. */
U.uiflag |= USER_AUTOPERSP;