ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้
ลงชื่อเข้าใช้ด้วย Microsoft
ลงชื่อเข้าใช้หรือสร้างบัญชี
สวัสดี
เลือกบัญชีอื่น
คุณมีหลายบัญชี
เลือกบัญชีที่คุณต้องการลงชื่อเข้าใช้

บทความนี้อธิบายถึงแพคเกจโปรแกรมแก้ไขด่วนสำหรับ Microsoft Visual Studio 2015 ปรับปรุง 3 โปรแกรมแก้ไขด่วนประกอบด้วยการแก้ไขปัญหาหลายตัวเพิ่มประสิทธิภาพ Visual C++ และตัวสร้างรหัส (c2.dll) สำหรับข้อมูลเพิ่มเติม ให้ดูส่วน "ปัญหาที่ที่ได้รับการแก้ไขในโปรแกรมแก้ไขด่วนนี้"

การแก้ปัญหา

วิธีการขอรับโปรแกรมแก้ไขด่วนนี้

แฟ้มต่อไปนี้จะสามารถดาวน์โหลดได้จากศูนย์ดาวน์โหลดของ Microsoft:

Download ดาวน์โหลดแพคเกจโปรแกรมแก้ไขด่วนนี้

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการดาวน์โหลดแฟ้มสนับสนุนของ Microsoft ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:

119591วิธีการขอรับแฟ้มสนับสนุนของ Microsoft จากบริการออนไลน์Microsoft สแกนแฟ้มนี้เพื่อหาไวรัสแล้ว Microsoft ใช้ซอฟต์แวร์ตรวจสอบไวรัสที่เป็นปัจจุบันที่สุดซึ่งพร้อมใช้งานตั้งแต่วันที่ซึ่งมีการประกาศแฟ้มนี้ แฟ้มนี้ถูกจัดเก็บไว้ในเซิร์ฟเวอร์ที่เพิ่มการรักษาความปลอดภัยซึ่งช่วยป้องกันการเปลี่ยนแปลงใด ๆ ที่ไม่ได้รับอนุญาตต่อแฟ้มดังกล่าว

ข้อกำหนดเบื้องต้น

เมื่อต้องการใช้โปรแกรมแก้ไขด่วนนี้ คุณต้องมี Visual Studio 2015 ปรับปรุง 3 ติดตั้ง

ข้อกำหนดการรีสตาร์ท

คุณอาจต้องรีสตาร์ทคอมพิวเตอร์หลังจากใช้โปรแกรมแก้ไขด่วนนี้ถ้าไม่มีอินสแตนซ์ของ Visual Studio กำลังถูกใช้งานอยู่

ข้อมูลการแทนที่โปรแกรมแก้ไขด่วน

โปรแกรมแก้ไขด่วนนี้ไม่แทนโปรแกรมแก้ไขด่วนอื่น ๆ

การตัดสินค้าจากคลังที่จะถูกแก้ไขในโปรแกรมแก้ไขด่วนนี้

โปรแกรมแก้ไขด่วนนี้ประกอบด้วยการแก้ไขสำหรับปัญหาต่าง ๆ ต่อไปนี้:

  • แก้จุดบกพร่องในตัวเพิ่มประสิทธิภาพการ hoisting นอกวนร้านค้าตามเงื่อนไขลูปตัวแปร: #include <cstdlib> #include <cassert> struct Foo { int a; int b; }; int main() { Foo foo; foo.b = rand(); int a = rand(); int b = foo.b; for (int i = 0; i < 10; ++i) { int inner_b = b; int inner_a = a; if (inner_b < 0) // This gets incorrect hoisted outside the loop. // A workaround is /d2SSAOptimizer- { inner_a = 0; inner_b = 0; } if (inner_b >= 0) assert(inner_a == a); a += b; } return 0; }

     

  • การแก้ไขสำหรับปัญหาการหารจำนวนเต็มตัวเพิ่มประสิทธิภาพการ: #include <stdio.h> volatile int z = 0; int main() { unsigned a, b; __int64 c; a = z; c = a; c = (c == 0) ? 1LL : c; b = (unsigned)((__int64)a * 100 / c); // Division was made unconditional // incorrectly creating a divide by zero. // A workaround is /d2SSAOptimizer- printf("%u\n", b); return 0; }

     

  • การแก้ไขสำหรับปัญหาการหารจำนวนเต็มตัวเพิ่มประสิทธิภาพการ: int checkchecksum(int suly, int ell, int utkodert) { int x; ell -= utkodert; ell %= 103; if (suly - 1) utkodert /= (suly - 1); // Division was made unconditional, // incorrectly creating a potential divide by zero // A workaround is /d2SSAOptimizer- return utkodert; }

     

  • การแก้ไขสำหรับปัญหาการหารจำนวนเต็มตัวเพิ่มประสิทธิภาพการ: typedef int unsigned uint; volatile uint out_index = 0; bool data[1] = {true}; bool __declspec(noinline) BugSSA(uint index) { uint group = index / 3; if (group == 0) // The division result being compared to zero is replaced // with a range check. We then incorrectly move the division { // to the next use of "group", without accounting for the fact // that "index" has changed. A workaround is /d2SSAOptimizer- return false; } index -= 3; group--; bool ret = data[group]; // crash here out_index = index; out_index = index; return ret; } int main() { volatile uint i = 3; return BugSSA(i); }

     

  • แก้ไขสำหรับความเสียหายในตัวเพิ่มประสิทธิภาพการหารของ MIN_INT ด้วย -1: int test_div(bool flag, int dummy) { int result = std::numeric_limits<int>::min(); int other; if (flag) other = -1; else other = dummy - 1 - dummy; result /= other; // We would push the division up into both arms of the // if-then-else. One of those divisions would cause the // optimizer to evaluate MIN_INT/-1.This is a crash, similar // to dividing by zero. A workaround is /d2SSAOptimizer- return result; }

     

  • แก้ไขข้อมูลเกินสแตกที่ในตัวเพิ่มประสิทธิภาพที่: #include <stdio.h> // This example produced a stack overflow in the optimizer, which was // caused by mutually-recursive analysis functions not properly tracking // the number of times they were invocated. // A workaround is /d2SSAOptimizer- typedef unsigned char byte; typedef unsigned long long int uint64; int main() { const uint64 *sieveData = new uint64[1024]; uint64 bitIndexShift = 0; uint64 curSieveChunk = 0xfafd7bbef7ffffffULL & ~uint64(3); const unsigned int *NumbersCoprimeToModulo = new unsigned int[16]; const unsigned int *PossiblePrimesForModuloPtr = NumbersCoprimeToModulo; while (!curSieveChunk) { curSieveChunk = *(sieveData++); const uint64 NewValues = (16 << 8) | (32 << 24); bitIndexShift = (NewValues >> (bitIndexShift + 8)) & 255; PossiblePrimesForModuloPtr = NumbersCoprimeToModulo + bitIndexShift; } if (PossiblePrimesForModuloPtr - NumbersCoprimeToModulo != 0) { printf("fail"); return 1; } printf("pass"); return 0; }

     

  • แก้ไขสำหรับการสร้างรหัสที่ไม่ถูกต้องเมื่อเอาซ้ำซ้อนลอยจุดการแปลงบัญชีแปลงพารามิเตอร์การ int32 ให้ f64: #include <string> __declspec(noinline) void test(int Val) { double Val2 = Val; std::string Str; printf("%lld\n", __int64(Val2)); // We incorrectly try to read 64 bits of // floating point from the parameter area, // instead of reading 32 bits of integer // and converting it. A workaround is // to throw /d2SSAOptimizer- } int main() { test(6); test(7); return 0; }

     

  • แก้ไขความเสียหายในตัวเพิ่มประสิทธิภาพการเมื่อโหนกราฟกระแสเก็บมาในคำสั่งเริ่มต้นของบล็อกสวิตช์ รายละเอียดเพิ่มเติม ให้ดูhttps://bugs.chromium.org/p/chromium/issues/detail?id=627216#c15

  • แก้ไขจุดบกพร่องในตัวเพิ่มประสิทธิภาพการวนรอบที่เราทำการลดความแรงไม่ถูกต้องของตัวแปร induction รองไม่มีลายเซ็นที่เป็นผลคูณของตัวแปร induction หลัก: #include <assert.h> #include <malloc.h> #include <stdio.h> typedef unsigned int uint; typedef unsigned char byte; /* There is a corner case in the compiler's loop optimizer. The corner case arose if an induction variable (IV) is a multiple of the loop index, and there's a comparison of the IV to an integer that is less than this multiplication factor. A workaround is to use #pragma optimize("", off) / #pragma optimize("", on) around the affected function. */ int main(int argc, char *argv[]) { const uint w = 256; const uint h = 64; const uint w_new = w >> 1; const uint h_new = h >> 1; const byte *const src = (byte *)malloc(w * h); byte *it_out = (byte *)malloc(w_new * h_new); int fail = 0; for (uint y_new = 0; y_new < h_new; ++y_new) { for (uint x_new = 0; x_new < w_new; ++x_new, ++it_out) { uint x = x_new * 2; uint y = y_new * 2; if (x < 1 || y < 1) { *it_out = 0; continue; } if (x != 0) { } else { fail = 1; } *it_out = 4 * src[y * w + x]; } } if (fail) { printf("fail\n"); return (1); } printf("pass\n"); return (0); }

     

  • เสนอวิธีแก้ปัญหาสำหรับ C4883 ": ขนาดของฟังก์ชันการปรับให้เหมาะสมไม่ใส่" เมื่อตัวเพิ่มประสิทธิภาพที่เห็นฟังก์ชันที่ massive ก็จะปรับขนาดกลับปรับให้เหมาะสมที่จะทำ นั้นจะออกคำเตือน C4883 เมื่อทำนี้ ถ้าคุณได้เปิดใช้งานการแจ้งเตือนผ่านทาง /we4883 ถ้าคุณต้องการแทนการตัดสินใจนี้เพื่อระงับการปรับให้เหมาะสม อยู่นอกกระบวนสวิตช์ /d2OptimizeHugeFunctions

  • แก้ไขการเกิดความผิดพลาดของคอมไพเลอร์ใน c2 PpCanPropagateForward เมื่อคุณทำการปรับให้เหมาะสมบน x64

  • การแก้ไขปัญหาสำหรับบักตัวเพิ่มประสิทธิภาพการวนรอบซึ่งเกี่ยวข้องกับการลดความแรงของตัวแปร induction ไม่ถูกต้อง

  • แก้ไขสำหรับการสั่งซื้อใหม่ไม่ถูกต้องของนิพจน์ซึ่งเกี่ยวข้องกับการอ่าน & เขียนไปยังหน่วยความจำได้เนื่องจาก มีการตรวจสอบนามแฝงที่ไม่ถูกต้อง

  • แก้ไขจุดบกพร่องลงทะเบียนตัวจัดสรรซึ่งเกี่ยวข้องกับการสร้างคอมไพเลอร์ชั่วคราวที่มีอยู่ระหว่างจัดการขอบเขตของข้อยกเว้นหลาย ครั้ง

สถานะ

Microsoft ยืนยันว่านี่เป็นปัญหาในผลิตภัณฑ์ของ Microsoft ซึ่งแสดงไว้ในส่วน "นำไปใช้กับ"

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ

ชุมชนช่วยให้คุณถามและตอบคําถาม ให้คําติชม และรับฟังจากผู้เชี่ยวชาญที่มีความรู้มากมาย

ข้อมูลนี้เป็นประโยชน์หรือไม่

คุณพึงพอใจกับคุณภาพภาษาเพียงใด
สิ่งที่ส่งผลต่อประสบการณ์ใช้งานของคุณ
เมื่อกดส่ง คำติชมของคุณจะถูกใช้เพื่อปรับปรุงผลิตภัณฑ์และบริการของ Microsoft ผู้ดูแลระบบ IT ของคุณจะสามารถรวบรวมข้อมูลนี้ได้ นโยบายความเป็นส่วนตัว

ขอบคุณสำหรับคำติชมของคุณ!

×