Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
dz̸·ÖÖ§Ô¤²â¡¢Á÷Ë®ÏßÓëÌõ¼þ×ªÒÆ
 
×÷Õߣº×ÞÇí¿¡ À´Ô´£º²©¿ÍÔ° ·¢²¼ÓÚ 2015-6-4
  2602  次浏览      27
 

Ò» Ò»¸öÎÊÌâ

ÔÚStackOverflowÉÏÓÐÕâôһ¸öÎÊÌâ Why is processing a sorted array faster than an unsorted array? ¡£Àý×ÓÖУ¬¶ÔÒ»¸öÊý×é½øÐÐÌõ¼þÇóºÍ£¬ÔÚÅÅÐòǰºÍÅÅÐòºó£¬ÐÔÄÜÓкܴóµÄ²î±ð¡£Ô­Ê¼µÄÀý×ÓÊÇC++ºÍJavaµÄ£¬ÕâÀォÆä»»³ÉÁËC# £º

static void Main(string[] args)
{
    // Generate data
    int arraySize;
    int[] data;
    Random rnd;

    arraySize = 32768;
    data = new int[arraySize];

    rnd = new Random(0);
    for (int c = 0; c < arraySize; ++c)
        data[c] = rnd.Next(256);

    // Test
    long sum = 0;
    CodeTimer.Time("unsorted array", 100000, () =>
    {
        for (int c = 0; c < arraySize; ++c)
        {
            if (data[c] >= 128)
                sum += data[c];
        }
    });

    Array.Sort(data);

    sum = 0;
    CodeTimer.Time("sorted array", 100000, () =>
    {
        for (int c = 0; c < arraySize; ++c)
        {
            if (data[c] >= 128)
                sum += data[c];
        }
    });
    Console.ReadKey();
}

´úÂëÖÐÊ×Ïȳõʼ»¯ÁËÒ»¸ö 32768´óСµÄintÐÍÊý×飬¸øÕâ¸öÊý×éµÄÿ¸öÔªËØËæ»ú¸³Óè0-256Ö®¼äµÄÖµ£¬È»ºó¶Ô¸ÃÊý×éÖдóÓÚ128²¿·ÖµÄÊý¾Ý½øÐÐÇóºÍ£¬²¢½«Õâ¸ö¹ý³ÌÀÛ¼Ó100000´Î¡£È»ºó·Ö±ð²âÁ¿Êý×éÔÚÅÅÐòǰºÍÅÅÐòºóµÄ ºÄʱ¡£ ÕâÀïʹÓÃÁËÀÏÕÔµÄCodeTimer¹¤¾ßÀ´£¬±¾ÈË»úÆ÷Xeon? E3-1230 v3@3.30GHz£¬ÔÚdebugÌõ¼þÏ£¬½á¹ûÈçÏ£º

ÔÚreleaseÌõ¼þÏ£¬½á¹ûÈçÏ£º

È»ºó×÷ÕßÌá³öÁËÎÊÌ⣬Ϊʲô½ö½ö¶ÔÊý¾Ý½øÐÐÁËÅÅÐò£¬´¦ÀíËٶȾͿìÁ˽«½üÒ»±¶»¹Òª¶àÄØ£¿

ÅÅÃûµÚÒ»µÄ»Ø´ð£¬½âÊ͵½ÊÇÓÉÓÚ·ÖÖ§Ô¤²â´íÎóµ¼ÖµÄÐÔÄܳͷ££¬ËùÒÔ»á²úÉúÐÔÄܵIJî±ð¡£Òª½âÊÍ·ÖÖ§Ô¤²âµÄ³Í·££¬Ê×ÏÈÀ´¿´Ê²Ã´ÊÇ·ÖÖ§Ô¤²â£¬ÒÔ¼°ÎªÊ²Ã´Ô¤²â´íÎó»áµ¼Ö³ͷ£¡£

¶þ ·ÖÖ§Ô¤²â

ʲôÊÇ·ÖÖ§Ô¤²â? Ö±½Ó˵¼ÆËã»ú¸ÅÄî»òÐí²»Ì«ºÃÀí½â£¬´ð°¸ÒÔÒ»¸öÌú··Ö֧·¿ÚµÄÀý×ÓÀ´ËµÃ÷ÁËʲôÊÇ·ÖÖ§Ô¤²â¡£

¿¼ÂÇÏÂÃæµÄÌú¹ì·ÖÖ§:

¼ÙÉèÔÚ»¹Ã»ÓÐÔ¶¾àÀëÐźÅͨѶµÄʱ´ú¡£ÄãÊÇÒ»¸öÌú··Ö֧·¿ÚµÄ²Ù×÷ÈËÔ±£¬µ±Ìýµ½»ð³µÒªÀ´ÁË£¬Äã¸ù±¾²»ÖªµÀ¼´½«µ½À´µÄÕâÁ¾»ð³µÒª¿ªÍùÄĸö·½Ïò¡£ÓÚÊÇ£¬ÄãÈÃÕâÁ¾»òÕßÍ£ÏÂÀ´£¬ÎÊÁгµ³¤ÕâÁ¾³µÒª¿ªÍùÄǸö·½Ïò£¬È»ºó½«Ìú¹ì°âµ½¶ÔÓ¦µÄ·½ÏòÉÏ¡£

»ð³µÊÇÒ»¸öºÜ±¿ÖصĶ«Î÷£¬Òò´Ë¾ßÓкܴóµÄ¹ßÐÔ£¬ÐèÒª»¨ºÜ¶àʱ¼äÆô¶¯ºÍÍ£Ö¹¡£

ÄÇô£¬ÓÐûÓиüºÃµÄ°ì·¨ÄØ£¿ÄǾÍÊÇ£¬ÓÉÄãÀ´²ÂÕâÁ¾»ð³µÒªÍùÄǸö·½Ïò×ߣ¡
?Èç¹û²Â¶ÔÁË£¬»ð³µ¿ÉÒÔÖ±½Ó¿ªÍùҪȥµÄ·½Ïò
?Èç¹û²Â´íÁË£¬»ð³µÒªÍ£ÏÂÀ´£¬È»ºóµ¹³µ£¬È»ºó½«³µ¹ì°âµ½ÕýÈ·µÄ·½Ïò£¬È»ºó»ð³µÖØÐ¿ªÍùÕýÈ·µÄ·½Ïò¡£

Èç¹ûÄãµÄ²Â²â×ÜÊÇÕýÈ·µÄ£¬ÄÇô»ð³µ¾Í²»ÓÃÍ£ÏÂÀ´ÁË

Èç¹ûÄã¾­³£²Â´í£¬ÄÇô»ð³µ¾ÍÒª»¨ºÜ¶àµÄʱ¼äÍ£ÏÂÀ´£¬ºóÍË£¬È»ºóÖØÐ¿ª¶¯¡£

ÏÖÔÚ£¬¿¼ÂÇÒ»¸öifÓï¾ä¡£if Óï¾ä±àÒëΪһ¸ö·ÖÖ§ÅжÏÖ¸Á

Èç¹ûÄãÊÇ´¦ÀíÆ÷£¬Äã¿´µ½ÁËÕâ¸ö·ÖÖ§£¬ÄãÊÂÏÈÍêȫûûÓа취֪µÀ½«´ÓÄǸö·ÖÖ§×ß¡£ÄÇôÔõô°ìÄØ£¿Äã¿ÉÒÔÈÃÖ¸ÁîÔÝÍ££¬µÈ´ýÖ±µ½Ö®Ç°µÄÖ¸ÁîÖ´ÐÐÍê³É£¬È»ºó±È½Ï½á¹û£¬È»ºóÍùÕýÈ·µÄÄǸö·½Ïò×ß¡£

ÏÖ´ú´¦ÀíÆ÷ºÜ¸´ÔÓ£¬²¢ÇÒÓкܳ¤µÄÁ÷Ë®Ïߣ¬Òò´ËÈç¹ûÊÇÕâÑùµÄ»°£¬¾ÍÐèÒªºÜ¶àʱ¼äÀ´Ô¤ÈÈÆô¶¯ºÍÍ£Ö¹¡£

ÄÇô£¬ÓÐûÓиüºÃÒ»µã¶ùµÄ°ì·¨ÄØ£¿ÄãÀ´²ÂÕâ¸öÖ¸ÁÍùÄǸö·½Ïò×ß:

1.Èç¹û²Â¶ÔÁË£¬Óï¾ä¿ÉÒÔ¼ÌÐøÖ´ÐÐ

2.Èç¹û²Â´íÁË£¬´¦ÀíÆ÷»á·ÅÆúÕû¸öÁ÷Ë®Ïߣ¬È»ºó»ØÍ˵½·ÖÖ§µØ·½£¬¼ÌÐø³¯ÕýÈ·µÄ·ÖÖ§Ö´ÐС£

Èç¹ûÿ´Î¶¼²Â¶Ô£¬ÄÇô´¦ÀíÆ÷²»ÐèÒªÔÝÍ£¿ÉÒÔÒ»Ö±Ö´ÐÐ

Èç¹û¾­³£²Â´í£¬ÄÇô´¦ÀíÆ÷¾ÍÒª»°ºÜ¶àʱ¼äÀ´ÔÝÍ££¬»ØÍË£¬È»ºóÖØÐÂÆô¶¯¡£

Õâ¾ÍÊÇ·ÖÖ§Ô¤²â£¬ËäÈ»Óûð³µÌú¹ìµÄ·½Ê½À´½âÊÍ¿ÉÄܲ»Ì«Ç¡µ±£¬ÒòΪͨ¹ýÆìÖÄ»òÕßÐźſÉÒÔÌáǰ֪ͨҪÍùÄǸö·½Ïò¡£ µ«ÊǶÔÓÚ¼ÆËã»úÀ´Ëµ£¬´¦ÀíÆ÷ÌáǰÊDz»ÖªµÀ½«ÒªÖ´ÐÐÄǸö·ÖÖ§µÄ£¬Ö»Óеȵ½Ö´Ðе½·ÖÖ§ÅжϵÄÄÇÒ»¿Ì£¬ÖµÇó³öÀ´Ö®ºó²Å¿ÉÒÔÈ·¶¨¡£

Òò´ËÈçºÎ²ÉÓÃÒ»ÖÖ²ßÂÔÀ´¼õÉÙ³ö´íµÄ´ÎÊý£¬¼õÉÙÀàËÆ»ð³µÍ£³µ£¬µ¹³µ£¬ÔÙÆô¶¯µÄÎÊÌâÄØ£¿ºÜ×ÔÈ»µÄ£¬¿ÉÒÔ¸ù¾ÝÒÔÍùµÄÇéÐÎÀ´Íƶϣ¡Èç¹ûÕâ¸ö»ð³µÒÔǰÓÐ99%µÄÇé¿ö×ß×ó±ß£¬ÄÇô¾Í¿ÉÒÔÔÚ»ð³µÀ´Ö®Ç°²Â²âËû×ß×ó±ß¡£Èç¹ûÐÐΪ·¢Éú±ä»¯£¬¿ÉÒÔ×öÏàÓ¦µÄµ÷Õû¡£Èç¹û·¢ÏÖÿ3´Îµ÷ÕûÒ»´Î·½Ïò£¬ÄÇô×ܽá³öÕâ¸ö¹æÂɺó¾Í¿ÉÒÔ×ö³öÊʵ±µÄµ÷Õû¡£

»»¾ä»°Ëµ£¬ÎÒÃÇÐèÒª×ܽá³öһЩģʽ£¬È»ºó×ñÑ­¡£Õâ»ò¶à»òÉÙ¾ÍÊÇ·ÖÖ§Ô¤²âÆ÷µÄ¹¤×÷¡£

´ó¶àÊýµÄÓ¦Óö¼ÓÐÐÐΪÁ¼ºÃµÄ·ÖÖ§¡£Òò´ËÏÖ´úµÄ·ÖÖ§Ô¤²âÆ÷Äܵ½´ïµ½90%ÒÔÉϵÄÔ¤²âÕýÈ·ÂÊ¡£µ«ÊÇÃæ¶ÔһЩ²»¿ÉÔ¤¼ûµÄ·ÖÖ§ºÍ²»¿ÉÖªµÄģʽ£¬·ÖÖ§Ô¤²âÆ÷¾ÍûÓжà´óÓÃÁË¡£

ͨ¹ýÉÏÃæµÄÃèÊö£¬³öÏÖÐÔÄܲî±ðµÄÎÊÌâ¹Ø¼üÔÚÓÚÕâ¸öifÓï¾ä£º

if (data[c] >= 128)
sum += data[c];

×¢Òâµ½dataÕâ¸öÊý×éÀïÃæµÄÖµÊÇÆ½¾ù·Ö²¼ÓÚ0-255Ö®¼äµÄ¡£µ±Êý¾ÝÅźÃÐòÖ®ºó£¬Ç°°ë²¿·ÖµÄÊý¾Ý¶¼»áСÓÚ128£¬ËùÒÔ²»»á½øµ½ifÓï¾äÀïÃæ£¬ºó°ë²¿·ÖµÄÖµ¶¼´óÓÚ128£¬ËùÒÔ»á½øµ½Ñ­»·Óï¾ä¡£

ÕâÖÖ¹æÂɶÔÓÚ·ÖÖ§Ô¤²âÆ÷·Ç³£ÓѺã¬ÒòΪ·ÖÖ§ÅжÏÓï¾ä·¢ÏÖ×ÜÊÇÑ¡Ôñij¸ö·½ÏòºÜ¶à´Î£¬ÓÚÊǾͺÜÈÝÒ××ö³öÅжϡ£¼´Ê¹Ò»¸ö¼òµ¥µÄ¼ÆÊýÆ÷¾Í¿ÉÒÔÕýÈ·Ô¤²â·ÖÖ§µÄ·½Ïò£¬³ýÁ˸ı䷽ÏòÖ®ºóµÄÒ»Á½´ÎÔ¤²âʧ°ÜÖ®Íâ¡£

ÏÂÃæÃèÊöÁËÀíÆ÷ÔÚ·ÖÖ§Ô¤²âʱµÄÐÐΪ£º

T = ¸Ã·ÖÖ§±»Ñ¡ÖÐ
N = ¸Ã·Ö֧ûÓб»Ñ¡Ôñ

data[] = 0, 1, 2, 3, 4, ... 126, 127, 128, 129, 130, ... 250, 251, 252, ...
branch = N  N  N  N  N  ...   N    N    T    T    T  ...   T    T    T  ...

       = NNNNNNNNNNNN ... NNNNNNNTTTTTTTTT ... TTTTTTTTTT  (ºÜÈÝÒ×½øÐÐÔ¤²â)

¿ÉÒÔ¿´µ½£¬µ±Êý¾ÝÅźÃÐòÖ®ºó£¬¶Ô·ÖÖ§Ô¤²âÆ÷Ê®·ÖÓѺ㬺ÜÈÝÒ×½øÐÐÔ¤²â¡£

µ«ÊÇ£¬µ±Êý¾ÝÍêÈ«ÊÇËæ»úµÄʱºò£¬·ÖÖ§Ô¤²âÆ÷±ãʧȥÁËÓô¦£¬ÒòΪËûÎÞ·¨Ô¤²âËæ»úµÄÊý¾Ý¡£Òò´Ë»áÓдó¸Å50%µÄÔ¤²âʧ°ÜÂÊ¡£

data[] = 226, 185, 125, 158, 198, 144, 217, 79, 202, 118,  14, 150, 177, 182, 133, ...
branch =   T,   T,   N,   T,   T,   T,   T,  N,   T,   N,   N,   T,   T,   T,   N  ...

       = TTNTTTTNTNNTTTN ...   (»ù±¾ÉÏËæ»ú³öÏÖ ¨C ºÜÄÑÔ¤²â)

ÄÇôÔõô°ìÄØ£¿

Èç¹û¼ÆËã»úûÓа취½«·ÖÖ§ÓÅ»¯³ÉÌõ¼þ×ªÒÆ£¬Ò²¿ÉÒÔʹÓÃһЩ¼¼ÇÉ£¬ÎþÉüһЩ¿É¶ÁÐÔ£¬ÒƳýÌõ¼þÅжϣ¬À´Ìá¸ßÐÔÄÜ

±ÈÈ磬¿ÉÒÔ½«ÏÂÃæµÄ·ÖÖ§Óï¾ä£º

if (data[c] >= 128)
sum += data[c];

Ìæ»»Îª£º

int t = (data[c] - 128) >> 31;
sum += ~t & data[c];

ÕâÀïʹÓÃÁËλÔËËã£¬ÒÆ³ýÁË·ÖÖ§Ô¤²â¡£ ÒÆ³ý·ÖÖ®ºó£¬ÔÙ½øÐвâÊÔ£¬ÔÚreleaseÌõ¼þÏ£¬½á¹ûÈçÏ£º

¿ÉÒÔ¿´µ½£¬ÔÚûÓзÖÖ§ÅжϵÄÌõ¼þÏ£¬¶ÔÓÐÐòºÍÎÞÐòÊý×éµÄ´¦Àí£¬ÔÚËÙ¶ÈÉÏÊDz¶àµÄ¡£

µ«ÊÇ£¬ÎªÊ²Ã´·ÖÖ§Ô¤²âÄܹ»Ìá¸ßÓ¦ÓóÌÐòµÄÖ´ÐÐЧÂÊ£¬Õâ¾ÍÒªÀ´¿´¿´ÏÖ´úCPUµÄÁ÷Ë®ÏßÉè¼ÆÁË¡£

Èý Ö¸ÁîµÄÁ÷Ë®Ïß

Ö¸ÁîµÄÁ÷Ë®Ïß»¯(pipelining)ÊÇÒ»ÖÖÔö¼ÓÖ¸ÁîÍÌÍÂÁ¿(throughput)µÄ·½·¨£¬¼´ÔÚµ¥Î»Ê±¼äÄÚÄܹ»Ìá¸ßͬʱִÐÐÖ¸ÁîµÄ¸öÊý¡£Ëû½«Ò»¸ö»ù±¾µÄÁ÷Ë®Ïß²ð·ÖΪÁ˼¸¸öÁ¬ÐøµÄ£¬¶ÀÁ¢µÄ²½Ö裬ȻºóijЩ²½Öè¾Í¿ÉÒÔͬʱִÐС£

Á÷Ë®Ïß»¯Í¨¹ýͬʱִÐÐһϵÁвÙ×÷Ôö¼ÓÁËÍÌÍÂÁ¿£¬µ«ÊÇËý²¢Ã»ÓмõÉÙÑÓ³Ù£¬¼´²¢Ã»ÓмõÉÙÒ»ÌõÖ¸Áî´ÓÖ´ÐпªÊ¼µ½Ö´ÐнáÊøµÄʱ¼ä£¬ÈÔÒªµÈµ½ÕâһϵÁÐÖ¸ÁîÍê³É¡£Êµ¼ÊÉÏ,Á÷Ë®Ïß»¯ÓÉÓÚ½«Ò»ÌõÖ¸Áî²ð·Ö³ÉÁ˼¸¸ö²½Öè´Ó¶ø¿ÉÄÜ»áÔö¼ÓÑÓ³Ù¡£

ÉÏͼÊÇÒ»¸ö¾ßÓÐ4²ãÁ÷Ë®ÏßµÄʾÒâͼ£¬Ò»°ãµÄÒ»¸ö·½·¨¿ÉÒÔ·ÖΪËĸö²½Ö裬¶ÁȡָÁî(Fetch)£¬Ö¸Áî½âÂë(Decode),ÔËÐÐÖ¸Áî(Execute)ºÍд»ØÔËÐнá¹û(Write back)¡£

ÉÏ·½»ÒÉ«²¿·ÖÊÇÒ»Á¬´®Î´ÔËÐеÄÖ¸ÁÏ·½»ÒÉ«²¿·ÖÊÇÒÑÖ´ÐÐÍê³ÉµÄÖ¸ÁÖмä°×É«²¿·ÖÊÇÁ÷Ë®Ïß¡£ÏÂÃæÊÇÔÚÿ¸öʱÖÓÖÜÆÚÏÂÖ¸ÁîµÄÖ´ÐÐ״̬¡£

¿É¼û£¬Á÷Ë®Ïß¼¼ÊõµÄÖ÷ҪĿµÄ¾ÍÊÇͨ¹ýÖØµþÁ¬ÐøÖ¸ÁîµÄ²½ÖèÀ´Ìá¸ßÍÌÍÂÁ¿´Ó¶ø»ñµÃÐÔÄÜ£¬Òª×öµ½ÕâÒ»µã£¬¾Í±ØÐëÄܹ»ÊµÏÖÈ·¶¨ÒªÖ´ÐÐÖ¸ÁîµÄÐòÁкÍÏȺó˳Ðò£¬ÕâÑù²ÅÄÜʹÁ÷Ë®ÏßÖгäÂúÁË´ýÖ´ÐеÄÖ¸Áî¡£µ±´¦ÀíÆ÷Óöµ½·ÖÖ§Ìõ¼þÌø×ªÊ±£¬Í¨³£²»ÄÜÈ·¶¨Ö´ÐÐÄǸö·ÖÖ§£¬Òò´Ë´¦ÀíÆ÷²ÉÓ÷ÖÖ§Ô¤²âÆ÷À´²Â²âÿÌõÌø×ªÖ¸ÁîÊÇ·ñ»áÖ´ÐС£Èç¹û²Â²â±È½Ï¿É¿¿£¬ÄÇôÁ÷Ë®ÏßÖоͻá³äÂúÖ¸Áî¡£µ«ÊÇ£¬Èç¹û¶ÔÌø×ªµÄÖ¸Áî²Â²â´íÎó£¬ÄÇô¾ÍÒªÒªÇó´¦ÀíÆ÷¶ªµôËüÕâ¸öÌø×ªÖ¸ÁîºóµÄËùÓÐÒÑ×öµÄ²Ù×÷£¬È»ºóÔÙ¿ªÊ¼ÓôÓÕýȷλÖô¦ÆðʼµÄÖ¸ÁîÈ¥Ìî³äÁ÷Ë®Ïߣ¬¿ÉÒÔ¿´µ½ÕâÖÖÔ¤²â´íÎó»áµ¼ÖºÜÑÏÖØµÄÐÔÄܳͷ££¬»áµ¼Ö´óÔ¼20-40¸öʱÖÓÖÜÆÚµÄÀË·Ñ£¬´Ó¶øµ¼ÖÂÐÔÄܵÄÑÏÖØÏ½µ¡£

ÔÚÕⲿ·Ö¿ªÊ¼´¦ÒѾ­ËµÃ÷£¬Èç¹û±àÒëÆ÷²»Äܽ«·ÖÖ§Ìø×ªÓÅ»¯ÎªÌõ¼þ×ªÒÆÖ¸Á¿ÉÒÔʹÓÃһЩ¼¼ÇÉ£¬±ÈÈçλÔËËãÀ´ÒƳý·ÖÖ§Åжϡ£

ÄǾÍÊÇ˵£¬Èç¹ûÄܹ»ÓÅ»¯ÎªÌõ¼þ×ªÒÆÖ¸ÁҲÄÜÌáÉýÐÔÄÜ¡£ÔÚ¸ÃÎÊÌâµÄUpdate²¿·Ö£¬ÌáÎÊÕß˵:

¡°GCC 4.6.1 with -O3 or -ftree-vectorize on x64 is able to generate a conditional move. So there is no difference between the sorted and unsorted data - both are fast. ¡±

GCCÊÇC/C++±àÒëÆ÷£¬-O3ÊDZíʾÓÅ»¯¼¶±ð£¬¿ÉÒÔ½«Ìõ¼þÌø×ªÓÅ»¯ÎªÌõ¼þ´«ËÍÖ¸Á´Ó¶øÊ¹µÃÔÚÓÐÐòºÍÎÞÐòÇé¿öÏ£¬¶ÔÊý¾ÝµÄ´¦ÀíͬÑù¸ßЧ£¬ÄÇôÌõ¼þ×ªÒÆÖ¸ÁîÊÇÊ²Ã´ÄØ£¿

ËÄ Ìõ¼þ´«ËÍÖ¸Áî

¹ØÓÚÌõ¼þ´«ËÍÖ¸ÁÔÚCSAPPÕâ±¾ÊéµÄµÚ3.6.6²¿·ÖÓнÌÏêϸµÄ½éÉÜ¡£ÕâÀïÕë¶ÔÕâÒ»¾ßÌåÎÊÌâÏêϸ½éÉÜһϣ¬Ìõ¼þ×ªÒÆÖ¸ÁîÊÇÈçºÎÓÅ»¯Ìõ¼þ·ÖÖ§Åжϣ¬´Ó¶øÀûÓÃÁ÷Ë®Ïß´Ó¶øÌá¸ßÓ¦ÓóÌÐòЧÂʵġ£

Ìõ¼þ´«ËÍÊÇÒ»ÖÖÌõ¼þÌø×ªµÄÒ»ÖÖÌæ»»²ßÂÔ£¬ËûÊ×ÏȾͼÆËã³öÒ»¸öÌõ¼þµÄÁ½ÖÖ½á¹û£¬È»ºóµÈµ½Ö´Ðе½·ÖÖ§Åжϵĵط½£¬¸ù¾ÝÌõ¼þÑ¡ÔñÒ»¸ö½á¹û¡£Ö»ÓÐÔÚһЩÊÜÏÞµÄÌõ¼þÏÂÕâÖÖ²ßÂԲſÉÐУ¬±ÈÈçÕâ¸öÀý×ÓÖеÄÅжÏÊý×ÖÊÇ·ñ´óÓÚ128È»ºóÇóºÍ¡£µ«ÊÇÈç¹û¿ÉÐУ¬¾Í¿ÉÒÔͨ¹ýÒ»Ìõ¼òµ¥µÄÌõ¼þ´«ËÍÖ¸ÁîÀ´ÊµÏÖ£¬¶ø²»ÊÇÐèÒªÌõ¼þÌø×ªÖ¸ÁîÀ´ÊµÏÖ·ÖÖ§Åжϡ£±ÈÈçÏÂÃæµÄÇóÁ½¸öÊýÏà¼õ¾ø¶ÔÖµµÄ·½·¨£¬Èç¹û²»Ê¹ÓÃÌõ¼þ´«ËÍÖ¸Á

ÔڱȽϴóС֮ºó£¬Í¨¹ýÌø×ªÖ¸Á¿ÉÒÔÌø×ªµ½ÕýÈ·µÄ·ÖÖ§È»ºóÖ´ÐнÓÏÂÀ´µÄÂß¼­¡£ ÒªÀûÓÃÁ÷Ë®Ïß¼¼Êõ£¬·ÖÖ§Ô¤²âÆ÷²»ÄÜÒÀÀµÉÏÒ»²½ÖèµÄ½á¹û³öÀ´ÁËÔÙÈ¥×öÅжϣ¬Ëü²»¿ÉÄܵȵ½cmplÖ´ÐÐÍê³ÉÔÙȥѡÔñ·ÖÖ§£¬ËüÐèÒªÌáǰ×ö³öÅжϣ¬Èç¹ûÅжÏÕýÈ·£¬Ã»ÓÐÎÊÌ⣬Èç¹û´íÎ󣬾ÍÓбȽÏÑÏÖØµÄ´íÎó³Í·££¬´Ó¶øÓ°ÏìÓ¦ÓóÌÐòÐÔÄÜ¡£

µ«ÊÇ£¬Èç¹ûʹÓÃÌõ¼þÌø×ª£¬Çé¿öÈçÏ£º

Ê×ÏȼÆËã³öÁËÁ½¸ö·ÖÖ§µÄ½á¹û£¬È»ºóÅжÏÌõ¼þ£¬¶ÔÁ½¸ö·ÖÖ§µÄ½á¹û×ö³öÑ¡Ôñ¡£ÕâÀïÃæ¾ÍûÓзÖÖ§ÅжϺÍÌø×ªÖ¸Áͨ¹ýÒ»ÌõcmovlÖ¸Áî (c±íʾÌõ¼þ£¬l±íʾless)¾Í¿ÉÒÔÍê³ÉÅжϺ͸³Öµ£¬ÕâÑù·ÖÖ§Ô¤²âÆ÷²»ÐèÒª×ö³ö·ÖÖ§Åжϣ¬Äܹ»ÀûÓÃÁ÷Ë®Ïߣ¬´Ó¶øÌá¸ßÓ¦ÓóÌÐòÐÔÄÜ¡£

µ«ÊÇ£¬Ê¹ÓÃÌõ¼þ´«ËÍÒ²²»×ÜÊÇÄܹ»Ìá¸ß´úÂëЧÂÊ¡£Èç¹ûÌõ¼þµÄÁ½¸ö·ÖÖ§¶¼ÐèÒª´óÁ¿µÄ¼ÆË㣬ÄÇôʵÏÖ¼ÆËã³öÀ´¾ÍÐèÒªºÜ¶àʱ¼ä£¬µ±Ìõ¼þ²»Âú×ãʱ£¬Õⲿ·Ö¹¤×÷¾ÍÀË·ÑÁË¡£±àÒëÆ÷±ØÐëÔÚÌõ¼þ´«ËÍÀ˷ѵļÆËãʱ¼äºÍ·ÖÖ§Ô¤²â´íÎóÔì³ÉµÄÐÔÄÜ´¦·£Ö®¼ä×ö³öȨºâ¡£Ò»°ãµÄ£¬Ö»ÓÐÔÚ·ÖÖ§´¦µÄÁ½¸ö±í´ïʽ¶¼ºÜÈÝÒ×¼ÆËãʱ£¬±ÈÈçÖ»ÓÐÒ»Ìõ¼Ó·¨Ö¸Á¾ÍÏñ±¾ÀýÖеġ±

sum += data[c]; ¡° ÕâÑù£¬Ìõ¼þ´«ËÍÌæ»»Ìõ¼þÌø×ª²ÅÄÜÌá¸ßЧÂÊ¡£×ܵÄÀ´Ëµ£¬Ìõ¼þÊý¾Ý´«ËÍÌṩÁËÒ»ÖÖÓÃÌõ¼þ×ªÒÆÀ´ÊµÏÖÌõ¼þ²Ù×÷µÄÌæ»»²ßÂÔ£¬ËûÖ»ÄÜÓÃÓÚһЩºÜ¼òµ¥µÄ³¡¾°£¬µ«ÊÇÕâÖÖÇé¿ö»¹ÊDZȽϳ£¼ûµÄ£¬ËüÄܹ»³ä·ÖÀûÓÃÏÖ´ú´¦ÀíÆ÷µÄÁ÷Ë®Ïß´Ó¶øÌá¸ßЧÂÊ¡£

Îå ½áÂÛ

±¾ÎÄÊ×ÏÈÒýÓÃÁËStackOverflowÉϵÄÒ»¸öÎÊÌâ¼°Æä½â´ð˵Ã÷ÁË·ÖÖ§Ô¤²â´íÎó¶ÔÓ¦ÓÚ³ÌÐòÐÔÄܵÄÓ°Ï죬Ȼºó¼òµ¥·ÖÎöÁËÏÖ´ú´¦ÀíÆ÷Á÷Ë®ÏßÖÐÈçºÎʹÓ÷ÖÖ§Ô¤²âÌá¸ßÓ¦ÓóÌÐòÐÔÄÜÒÔ¼°·ÖÖ§Ô¤²â´íÎóµ¼ÖµÄÐÔÄܳͷ££¬×îºó½áºÏÎÊÌâ¸ø³öµÄʹÓü¼ÇÉÌæ»»·ÖÖ§Åжϣ¬¼òÒª·ÖÎöÁËΪʲôͨ¹ý½«Ìõ¼þÌø×ªÓÅ»¯ÎªÌõ¼þ´«ËÍÄܹ»³ä·ÖÀûÓÃÖ¸ÁîÁ÷Ë®Ïߣ¬´Ó¶øÍ¬ÑùÄܹ»Ìá¸ß³ÌÐòÐÔÄÜ¡£

   
2602 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
 
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
 
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ʹÓÃdecj¼ò»¯Webǰ¶Ë¿ª·¢
Web¿ª·¢¿ò¼ÜÐγÉÖ®ÂÃ
¸üÓÐЧÂʵÄʹÓÃVisual Studio
MVP+WCF+Èý²ã½á¹¹´î½¨¿ò¼Ü
ASP.NETÔËÐлúÖÆÇ³Îö¡¾Í¼½â¡¿
±àд¸üºÃµÄC#´úÂë
10¸öVisual Studio¿ª·¢µ÷ÊÔ¼¼ÇÉ

.NET¿ò¼ÜÓë·Ö²¼Ê½Ó¦Óüܹ¹Éè¼Æ
.NET & WPF & WCFÓ¦Óÿª·¢
UML&.Net¼Ü¹¹Éè¼Æ
COM×é¼þ¿ª·¢
.NetÓ¦Óÿª·¢
InstallShield

ÈÕÕÕ¸Û .NET Framework & WCFÓ¦Óÿª·¢
Éñ»ªÐÅÏ¢ .NETµ¥Ôª²âÊÔ
±±¾© .NetÓ¦ÓÃÈí¼þϵͳ¼Ü¹¹
̨´ïµç×Ó .NET³ÌÐòÉè¼ÆÓ뿪·¢
ÈüÃÅÌú¿Ë C#Óë.NET¼Ü¹¹Éè¼Æ
¹ã¶«ºËµç .NetÓ¦ÓÃϵͳ¼Ü¹¹