Switching to real page sizes, not allocation granularity.

This commit is contained in:
Ben Vanik 2015-07-29 20:28:06 -07:00
parent 122114d1d1
commit c67173fe36
3 changed files with 16 additions and 2 deletions

View File

@ -21,8 +21,13 @@ namespace xe {
namespace memory {
// Returns the native page size of the system, in bytes.
// This should be ~4KiB.
size_t page_size();
// Returns the allocation granularity of the system, in bytes.
// This is likely 64KiB.
size_t allocation_granularity();
enum class PageAccess {
kNoAccess = 0,
kReadOnly = 1 << 0,

View File

@ -15,6 +15,16 @@ namespace xe {
namespace memory {
size_t page_size() {
static size_t value = 0;
if (!value) {
SYSTEM_INFO si;
GetSystemInfo(&si);
value = si.dwPageSize;
}
return value;
}
size_t allocation_granularity() {
static size_t value = 0;
if (!value) {
SYSTEM_INFO si;

View File

@ -50,8 +50,7 @@ ThreadState::ThreadState(Processor* processor, uint32_t thread_id,
// only Protect() on system page granularity.
stack_size = (stack_size + 0xFFF) & 0xFFFFF000;
uint32_t stack_alignment = (stack_size & 0xF000) ? 0x1000 : 0x10000;
uint32_t stack_padding =
uint32_t(xe::memory::page_size()); // Host page size.
uint32_t stack_padding = 64 * 1024; // 0x4...0x7F is 64k.
uint32_t actual_stack_size = stack_padding + stack_size;
bool top_down = false;
switch (stack_type) {