in spqr_householder, use heap when the expected array size is greater than 2M bytes, otherwise, use local stack. Could have a better fix globally
							parent
							
								
									5745226452
								
							
						
					
					
						commit
						c1fee1ab88
					
				|  | @ -94,8 +94,17 @@ namespace gtsam { | |||
| 				Stair[j] = m; | ||||
| 		} | ||||
| 
 | ||||
| 
 | ||||
| 		// YDJ: allocate buffer if m*n grows more than 2M bytes
 | ||||
| 		const int sz = 250000; // the stack is limited to 2M, o
 | ||||
| 		const int mn = m*n ; | ||||
| 		double buf[sz] ; | ||||
| 		double *a ; | ||||
| 		if ( mn > sz ) a = new double [mn] ; | ||||
| 		else a = buf ; | ||||
| 
 | ||||
| 		// convert from row major to column major
 | ||||
| 		double a[m*n]; int k = 0; | ||||
| 		int k = 0; | ||||
| 		for(int j=0; j<n; j++) | ||||
| 			for(int i=0; i<m; i++, k++) | ||||
| 				a[k] = A(i,j); | ||||
|  | @ -126,6 +135,8 @@ namespace gtsam { | |||
| 				A(i,j) = a[k]; | ||||
| 		} | ||||
| 
 | ||||
| 		if ( mn > sz ) delete [] a; | ||||
| 
 | ||||
| 		delete []Stair; | ||||
| 		cholmod_l_finish(&cc); | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue