mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Add fast-path for comparing interned (true) string objects.
This patch boosts performance for comparing identical string object by some 20% on my machine while not causing any noticable slow-down for other operations (according to tests done with pybench).
This commit is contained in:
		
							parent
							
								
									f0b11d2893
								
							
						
					
					
						commit
						c52d713b7a
					
				
					 1 changed files with 15 additions and 0 deletions
				
			
		|  | @ -1778,6 +1778,21 @@ eval_frame(PyFrameObject *f) | ||||||
| 				x = res ? Py_True : Py_False; | 				x = res ? Py_True : Py_False; | ||||||
| 				Py_INCREF(x); | 				Py_INCREF(x); | ||||||
| 			} | 			} | ||||||
|  | 			else if (v == w && PyString_CheckExact(v)) { | ||||||
|  | 			    	/* Fast-path for comparing interned strings */ | ||||||
|  | 				switch (oparg) { | ||||||
|  | 				case EQ: x = Py_True; break; | ||||||
|  | 				case LE: x = Py_True; break; | ||||||
|  | 				case GE: x = Py_True; break; | ||||||
|  | 				case NE: x = Py_False; break; | ||||||
|  | 				case GT: x = Py_False; break; | ||||||
|  | 				case LT: x = Py_False; break; | ||||||
|  | 				case IS: x = Py_True; break; | ||||||
|  | 				case IS_NOT: x = Py_False; break; | ||||||
|  | 				default: goto slow_compare; | ||||||
|  | 				} | ||||||
|  | 				Py_INCREF(x); | ||||||
|  | 			} | ||||||
| 			else { | 			else { | ||||||
| 			  slow_compare: | 			  slow_compare: | ||||||
| 				x = cmp_outcome(oparg, v, w); | 				x = cmp_outcome(oparg, v, w); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Marc-André Lemburg
						Marc-André Lemburg