请教如果给数组快速赋一个最大值?
请教如果给数组快速赋一个最大值?
int arr[100]
我知道 memset(arr, 0, 100 * sizeof(int)); 是将数组快速清零;
怎么让数组每个值都为 INT_MAX?
多谢。
[解决办法]
int * pI = arr;
int * pE = arr + sizeof(arr)/sizeof(arr[0]);
while( pI != pE )
*( pI++ ) = INT_MAX;
int * pI = arr;
int * pE = arr + sizeof(arr)/sizeof(arr[0]);
while( pI != pE )
*( pI++ ) = INT_MAX;
这代码貌似就是一个循环,给内存赋值,我若这样写似乎没什么区别:
for (int i=0; i<100; ++i)
*( arr+i ) = INT_MAX;
您的这样写优化到哪里?求教了,多谢。
各位:纯粹写代码为了玩,不考虑编译器优化或者实用性。
如果对性能确实有较高要求,内存都是对齐的,可以用MMX,SSE2指令,肯定比编译器编出来的代码快很多
#include <stdio.h>
int arr[100];
int main() {
int i;
__asm {
push ecx
push edi
mov eax,0x7FFFFFFF
mov ecx,100
mov edi,offset arr[0]
rep stosd
pop edi
pop ecx
}
for (i=0;i<100;i++) printf("%03d,%d\n",i,arr[i]);
return 0;
}
//000,2147483647
//001,2147483647
//002,2147483647
//003,2147483647
//004,2147483647
//005,2147483647
//006,2147483647
//007,2147483647
//008,2147483647
//009,2147483647
//010,2147483647
//011,2147483647
//012,2147483647
//013,2147483647
//014,2147483647
//015,2147483647
//016,2147483647
//017,2147483647
//018,2147483647
//019,2147483647
//020,2147483647
//021,2147483647
//022,2147483647
//023,2147483647
//024,2147483647
//025,2147483647
//026,2147483647
//027,2147483647
//028,2147483647
//029,2147483647
//030,2147483647
//031,2147483647
//032,2147483647
//033,2147483647
//034,2147483647
//035,2147483647
//036,2147483647
//037,2147483647
//038,2147483647
//039,2147483647
//040,2147483647
//041,2147483647
//042,2147483647
//043,2147483647
//044,2147483647
//045,2147483647
//046,2147483647
//047,2147483647
//048,2147483647
//049,2147483647
//050,2147483647
//051,2147483647
//052,2147483647
//053,2147483647
//054,2147483647
//055,2147483647
//056,2147483647
//057,2147483647
//058,2147483647
//059,2147483647
//060,2147483647
//061,2147483647
//062,2147483647
//063,2147483647
//064,2147483647
//065,2147483647
//066,2147483647
//067,2147483647
//068,2147483647
//069,2147483647
//070,2147483647
//071,2147483647
//072,2147483647
//073,2147483647
//074,2147483647
//075,2147483647
//076,2147483647
//077,2147483647
//078,2147483647
//079,2147483647
//080,2147483647
//081,2147483647
//082,2147483647
//083,2147483647
//084,2147483647
//085,2147483647
//086,2147483647
//087,2147483647
//088,2147483647
//089,2147483647
//090,2147483647
//091,2147483647
//092,2147483647
//093,2147483647
//094,2147483647
//095,2147483647
//096,2147483647
//097,2147483647
//098,2147483647
//099,2147483647
//
如果对性能确实有较高要求,内存都是对齐的,可以用MMX,SSE2指令,肯定比编译器编出来的代码快很多